programing tip

UISegmentedControl에 대한 클릭 이벤트 정의

itbloger 2020. 11. 29. 09:59
반응형

UISegmentedControl에 대한 클릭 이벤트 정의


UISegmentedControl내 응용 프로그램에 추가했습니다 . 정상 상태에서는 버튼이 선택되지 않습니다. 첫 번째 세그먼트가 선택되면 버튼 클릭 이벤트를 구현하고 다른 버튼을 클릭하면 다른 이벤트를 구현하고 싶습니다.


귀하의 질문을 올바르게 이해했다면 UISegmentControl의 참조 문서에 제공된 예제와 똑같이 상수에 대한 대상 작업 메서드 ( 의 부모 클래스 UIControl지원됨)를 구현하면됩니다 .UISegmentedControlUIControlEventValueChanged

[segmentedControl addTarget:self
                     action:@selector(action:)
           forControlEvents:UIControlEventValueChanged];

다음 서명이있는 메시지에 사용됩니다.

- (void)action:(id)sender

또는

[segmentedControl addTarget:self
                     action:@selector(action:forEvent:)
           forControlEvents:UIControlEventValueChanged];

...에 대한

- (void)action:(id)sender forEvent:(UIEvent *)event

또는

[segmentedControl addTarget:self
                     action:@selector(action)
           forControlEvents:UIControlEventValueChanged];

가장 간단한 방법 :

- (void)action

UIKit에서 사용되는 표준 유형의 타겟 액션 선택기입니다.


이 시도:

- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
      NSInteger selectedSegment = sender.selectedSegmentIndex;

      if (selectedSegment == 0) {

      }
      else{

      }
    }

이걸로 해봐,

    UISegmentedControl  * travelModeSegment = [[UISegmentedControl alloc] initWithItems:
    [NSArray arrayWithObjects:NSLocalizedString(@"Driving", nil),                 NSLocalizedString(@"Walking", nil), nil]];
    [travelModeSegment setFrame:CGRectMake(9.0f, 0.0f, 302.0f, 45.0f)];
    [cell addSubview:travelModeSegment];
    [travelModeSegment release];

그런 다음 작업을 작성하고

     if (travelModeSegment.selectedSegmentIndex == 0) {
        //write here your action when first item selected
    } else {
        //write here your action when second item selected
    }

도움이 되길 바랍니다


신속한 업데이트의 간단한 버전

func loadControl(){
     self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged)
}

func segmentSelected(sender: UISegmentedControl)
{
    let index = sender.selectedSegmentIndex

    // Do what you want
}

선택기가 메소드와 정확히 일치해야하지만 실제 매개 변수는 없어야한다는 점은 주목할 가치가 있습니다.

@selector(action)
    => -(void) action { ..code.. }

@selector(action:) 
    => -(void) action:(id)sender { ..code.. }

@selector(action:forEvent:) 
    => -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }

이것은 가장 오랫동안 나를 혼란스럽게했으며 이전 답변에서 명확하지 않습니다.


SWIFT의 경우 다음을 사용하십시오.

segmentedControl.addTarget( self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged )

다음과 같은 메소드를 구현하십시오.

func segmentSelected(sender: UISegmentedControl)
{
    println("selected index: \(sender.selectedSegmentIndex)")
}

선택한 세그먼트가 선택 될 때 특정 조치를 호출하려면 UISegmentedControl을 확장하십시오.

class CustomSegmentedControl : UISegmentedControl
{        
    override init()
    {
        super.init()
    }

    override init(frame:CGRect)
    {
        super.init(frame:frame)
    }

    required init(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
    }

    func valueChanged(index:Int)
    {
         // ACTION GOES HERE
    }      
}

다음과 같이 "segmentSelected"에서 "valueChanged"를 호출합니다.

func segmentSelected(sender: CustomSegmentedControl)
{
    println("selected index: \(sender.selectedSegmentIndex)")
    sender.valueChanged(sender.selectedSegmentIndex)
}

이와 같이 간단합니다.이 액션이 작동하도록하려면 스토리 보드를 사용하여 뷰 컨트롤러에 액션을 만들어야합니다.

- (IBAction)searchSegmentedControl:(UISegmentedControl *)sender
{
    switch (sender.selectedSegmentIndex) {
        case 0:
            NSLog(@"First was selected");
            break;
        case 1:
            NSLog(@"Second was selected");
            break;
        case 2:
            NSLog(@"Third was selected");
            break;
        default:
            break;
    }
}

IB의 핸들러를 값 변경 이벤트에 연결할 수 있습니다. UIControlEventValueChanged

또는 코드에서 할 수 있습니다.

[segmentedControl addTarget:self
                     action:@selector(action:)
           forControlEvents:UIControlEventValueChanged];

참고 URL : https://stackoverflow.com/questions/3049169/define-click-event-for-uisegmentedcontrol

반응형