2009-12-30 1 views
3

내 인터페이스에 10 개의 버튼을 사용하고 있으며 때때로 버튼 선택기를 변경해야합니다.UIControl - 할당 된 셀렉터 변경 : addTarget & removeTarget

-(void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

을 나는 선택을 변경하기 전에 또는 난 그냥 사용할 수 있습니다 :

내가 사용해야합니까

-(void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

내가 걱정하는 나는 addTarget을을 사용하여 선택기를 변경하는 경우 : 방법 내 UIButton을 눌렀을 때 발동되는 셀렉터를 본질적으로 "스택"할 removeTarget : 메서드가 없다.

답변

12

예 새로운 대상을 버튼에 할당하기 전에 항상 이전에 추가 한 대상을 제거해야합니다. 이처럼 ---

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn setFrame:CGRectMake(50, 50, 200, 50)]; 

    [btn setTag:101]; 
    [btn addTarget:self action:@selector(method1) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:btn]; 


    btn = (UIButton *)[self.view viewWithTag:101]; 
    [btn removeTarget:self action:@selector(method1) forControlEvents:UIControlEventTouchUpInside]; 
    [btn addTarget:self action:@selector(method2) forControlEvents:UIControlEventTouchUpInside]; 

는 이제 다음이

btn = (UIButton *)[self.view viewWithTag:101]; 
     [btn addTarget:self action:@selector(method2) forControlEvents:UIControlEventTouchUpInside]; 

을 할 경우 방법의 방법 항목 및 방법 2 모두 호출됩니다.

희망이 도움이됩니다.

+2

감사합니다. 나는 apple docs가 action에 NULL을 넘기는 것을 알았습니다 : 매개 변수는 "대상과 쌍을 이루는 모든 동작 메소드를 제거합니다. removeTarget : 메서드의 수신기가 UIButton이고 대상이 self (viewController에서 호출 됨)이면 모든 메서드가 제거됩니다 그 UIButton에 묶여 있습니까? 각 버튼에 하나의 메소드 만 할당 했으므로, action : 매개 변수에 NULL을 전달하면됩니다.이 경우 정확한 메소드를 참조하는 것과 유사하지는 않습니다. 위의 예에서와 같이 제거해야합니까? –

2

예, 이전 대상/조치를 제거하거나 이전 및 신규 조치를 모두 수행해야합니다.