2012-08-11 3 views
0

Я программным образом изменил название кнопки UIButton. Я также назначил действие для изменения названия кнопки. Теперь, когда я нажимаю на кнопку, она вызывает как действие (одно с тем же названием кнопки, и одно с измененным). Тем не менее, я хочу вызвать только одно действие для измененной кнопки названия.Кнопка запускает два действия при нажатии кнопки с измененной кнопкой.

Как я могу это сделать? Любая помощь будет оценена по достоинству.

+0

Простое решение для этого - назначить только один метод действий кнопке и использовать его текст заголовка как параметр и на основе этого выполнить различные инструкции, используя инструкцию if-else :) –

ответ

1

Два решения. Переключить цель/действие между методами или решить, что делать на основе какого-либо состояния.

1.

- (void)method1:(id)sender; 
{ 
    [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; 
    [sender addTarget:self action:@selector(method2:) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void)method2:(id)sender; 
{ 
    [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; 
    [sender addTarget:self action:@selector(method1:) forControlEvents:UIControlEventTouchUpInside]; 
} 

2a.

- (void)buttonTapped; 
{ 
    if (self.someState) { 

    } else { 

    } 
} 

2b.

- (void)buttonTapped:(UIButton *)button; 
{ 
    if ([[button titleForState:UIControlStateNormal] isEqualToString:@"First title"]) { 

    } else { 

    } 
} 
+0

Спасибо, Пол. Это работало безупречно. –

0

Если вы назначили два действия для одной и той же кнопки для состояния управления touchupinside, оно всегда будет запускать both.You следует удалить первое действие при добавлении второй и удалить вторую и добавить первый раз в конце функции селектора.

Ниже приведено действие кнопки по умолчанию;

[button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside] 

В действииOne вы можете вызвать удаление наблюдателя для первого действия и добавить второй.

[button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside] 

И в actionTwo функции вы реверсе

+0

Привет. Спасибо за помощь. Но когда я использую другое UIControlState, другое название не вызывает разные действия на одной и той же кнопке. Посмотрите на мой код. Возможно, я ошибаюсь. if ([urlresponse status code] == 200) { [myButton setTitle: @ "Unfollow" forState: UIControlStateNormal]; // название изменено } если ([myButton.currentTitle isEqualToString: @ "Перестать"]) { [MyButton addTarget: само действие: @selector (unfollowButtonPressed :) forControlEvents: UIControlEventTouchUpInside]; } –

0

Вместо того, чтобы два условия

f([urlresponse status code] == 200) 
{ 
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed 

[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

} 

Это может быть полезно для вашего случая.

Смежные вопросы