У меня была такая же проблема, и вот мое решение, оно прекрасно работает для меня:
В контроллере вида или представления, который вы реализовали <UITextFieldDelegate>
(в моем случае у меня есть пользовательский UITableViewCell
с именем TextFieldCell),
Объявите UITapGestureRecognizer
как свойство:
@interface TextFieldCell : UITableViewCell <UITextFieldDelegate>
{
UITextField *theTextField;
UITapGestureRecognizer *gestureRecognizer;
}
@property (nonatomic,retain) UITextField *theTextField;
@property (nonatomic,retain) UITapGestureRecognizer *gestureRecognizer;
И инициализируйте его в вашем представлении / контроллере:
self.gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeKeyboard:)];
В методе - (void)textFieldDidBeginEditing:(UITextField *)textField
используйте superView
, чтобы перейти к вашему tableView, и вызовите addGestureRecognizer
:
[self.superview.superview addGestureRecognizer:gestureRecognizer];
А в - (void)textFieldDidEndEditing:(UITextField *)textField
просто удалите распознаватель жестов:
[self.superview.superview removeGestureRecognizer:gestureRecognizer];
Надеюсь, это поможет.