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, поэтому я не тестировал устройство, просто симулятор.
Кто-нибудь знает, что здесь происходит, и как его решить?
Ответы
Ответ 1
Вы очень хорошо объяснили причину проблемы. На iOS 5, UITapGestureRecognizer на надстройке кнопки препятствует действию кнопки. На iOS 6 они исправили это: они представили событие UIView gestureRecognizerShouldBegin:
, и кнопка автоматически возвращает NO для распознавателя жестов касания, прикрепленного к супервизу.
Для iOS 5 вам нужно использовать метод делегата в распознавателе жестов, чтобы он не узнал, была ли нажата кнопка просмотра.
Ответ 2
В моем случае я также использовал общий UITapGestureRecognizer
для отклонения клавиатуры, открытой текстовым полем, когда пользователь нажимал в любом месте основного вида.
Я исправил это, только добавив распознаватель жестов, когда появляется клавиатура (см.
- (void)keyboardWillShow:(NSNotification *)n
или
- (BOOL)textFieldShouldBeginEditing:(VDTextFieldWithError *)textField
)
а затем удаление распознавателя жестов при скрытии клавиатуры (таким образом, удаление селектора в методе выбора самого распознавателя)