Подтвердить что ты не робот

UIButton не вызывает действие в iOS 5, но работает в iOS 6

У меня есть UIButton, который загружается из xib файла в качестве свойства IBOutlet контроллера вида. Я прикрепляю селектор к кнопке в viewDidLoad моего контроллера вида:

[_myButton addTarget:self action:@selector(mySelector) forControlEvents:UIControlEventTouchUpInside];

В iOS 6 все работает, но когда я запускаю симулятор в iOS 5.0, селектор не вызывается. Кнопка подчеркивает, когда она коснулась.

Еще одно замечание: кнопка находится в UIView с добавлением UITapGestureRecognizer. UITapGestureRecognizer для этого представления вызывается в iOS 5.0 при нажатии кнопки (он не вызывается в iOS 6, где вместо этого вызывается селектор кнопок).

У меня нет устройства под управлением iOS 5, поэтому я не тестировал устройство, просто симулятор.

Кто-нибудь знает, что здесь происходит, и как его решить?

4b9b3361

Ответ 1

Вы очень хорошо объяснили причину проблемы. На iOS 5, UITapGestureRecognizer на надстройке кнопки препятствует действию кнопки. На iOS 6 они исправили это: они представили событие UIView gestureRecognizerShouldBegin:, и кнопка автоматически возвращает NO для распознавателя жестов касания, прикрепленного к супервизу.

Для iOS 5 вам нужно использовать метод делегата в распознавателе жестов, чтобы он не узнал, была ли нажата кнопка просмотра.

Ответ 2

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

Я исправил это, только добавив распознаватель жестов, когда появляется клавиатура (см.

- (void)keyboardWillShow:(NSNotification *)n или

- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField)

а затем удаление распознавателя жестов при скрытии клавиатуры (таким образом, удаление селектора в методе выбора самого распознавателя)