2015-06-22 7 views
2

У меня есть UIButton. Я связал цель следующим образом.Несколько кликов по триггеру UIButton Целевая функция несколько раз

[button addTarget:self action:@selector(myFunction) 
       forControlEvents:UIControlEventTouchUpInside]; 

Когда я нажимаю кнопку «Я» несколько раз быстро, вы вызываете целевую функцию несколько раз. На кнопке Tapping i представлен новый контроллер View. , когда я нажимаю 3 раза быстрее, тогда мой новый контроллер просмотра отображается 3 раза.

Это что-то глупое. Что еще раз вызовет функцию снова, когда представление было перенесено на новый контроллер View. Почему Hell Apple делает такие глупые вещи?

Любая помощь, пожалуйста?

ответ

3

Прежде всего, это не яблочные ошибки. Он должен обрабатываться вручную. Так следовать этим шаг

Сначала сделать свой глобальный экземпляр вашей кнопки, то сделать это

.h файл

@property (weak, nonatomic) IBOutlet UIButton *btn; 

.m файл

- (IBAction)myFunction:(id)sender 
{ 
    self.btn.userInteractionEnabled = NO; 
} 

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.btn.userInteractionEnabled = YES; 
} 
2

Возьмите один глобальный флаг bool, например «isItDone», или объявите его в одноэлементном классе.

  1. в «MYFUNCTION» установить его как ложное
  2. который Посмотреть контроллер вы нажимаете на эту функцию в методе этого класса «ViewDidAppear» установлен как истинный.

это вам поможет. У меня такая же проблема, и это хорошее решение для управления ею с использованием одной глобальной переменной.

1

Я думаю, это поможет вам.

Изменение функции вызова, как этот

- (IBAction)myFunction:(id)sender 
{ 
    UIButton *button = (UIButton*)sender; 
    button.userInteractionEnabled = NO; 
} 

и вызвать вашу функцию как этот

[button addTarget:self action:@selector(myFunction:) 
      forControlEvents:UIControlEventTouchUpInside]; 

если вы хотите сохранить выбор упаковывают вы вернулись к контроллеру просмотра только тогда вам нужно сохранить логический флаг для хранения, если его щелкнуть один раз или нет.

+0

Я думаю, но с помощью этого кода пользователь может нажать те только на этой кнопке, я прав или я пропускаю что-то понять? –

+0

Нет йо. в соответствии с моим ответом пользователь может нажать кнопку только один раз, и если вы хотите, чтобы пользователь снова нажал кнопку в любом состоянии, вы можете просто активировать взаимодействие пользователя, проверив. –

+0

убедитесь, что вы вызываете функцию вроде (myFunction :) не только (myFunction) –

1

Установите IBOutlet к кнопке, в представленииWillAppear метод написать,

button.userInteractionEnabled = YES; 

и при нажатии на кнопку Set,

button.userInteractionEnabled = NO; 
+0

В чем разница между вашим и моим ответом ?? –

+0

Что нужно IBOutlet? –