У меня была эта проблема, когда я отклонял клавиатуру, когда пользователь нажимал в другом месте экрана.У меня был распознаватель жестов, который искал касания, и при обнаружении касания он вызывал resignFirstResponder для текстового поля.К сожалению, это ломает кнопку очистки.
Я отфильтровал отводы, чтобы убедиться, что они находятся за пределами представления таблицы, что несколько усложнило необходимость вручную нажимать на кнопки:
// In: - (void)handleTap:(UITapGestureRecognizer *)sender {
// The user tapped outside a text field, drop the keyboard.
// Unfortunately this normally breaks the clear button, so we'll check that the
// tap is outside the table view (and therefore not on a clear button).
BOOL inButton = CGRectContainsPoint(self.signInButton.bounds, [sender locationInView:self.signInButton]);
BOOL inTable = CGRectContainsPoint(self.tableView.bounds, [sender locationInView:self.tableView]);
if (!inTable && !inButton ) {
BOOL didEndEditing = [self.view endEditing:NO];
// But... if we were editing a field (& therefore the keyboard is showing),
// and if they tapped the sign in button, sign in. Not sure where the
// onSignIn event is getting lost. The button does highlight. But the
// call to endEditing seems to eat it.
if (didEndEditing && inButton) {
[self onSignIn:self.signInButton];
}
}