2014-07-31 2 views
-1

В моем приложении для iPhone есть текстовое поле (и некоторые другие элементы управления). Клавиша num отображается, когда пользователь нажимает текстовое поле. Я хотел, чтобы закрыть эту Num Pad (по [self.textField resignFirstResponder]), как только пользователю нажимает на фоне вида (легко обнаружить) , но и, когда пользователь нажимает на любом другом контроля!Как обнаружить кран вне UITextField (для отмены клавиатуры)

Как я могу обнаружить, что пользователь удаляет текстовое поле (но не обязательно на фоне)?

+0

У вас есть ответ [здесь] (Http: // stackoverflow.com/questions/6991085/how-to-dismiss-number-pad-keyboard-by-tapping-anywhere?rq=1). – duci9y

+0

Это не работает так хорошо, если пользователь удаляет другой элемент управления (а не фон). – ragnarius

+0

Вы можете оставить первого ответчика на действия других элементов управления. – duci9y

ответ

1

Просто используйте:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [self.view endEditing:YES]; 
} 
+0

Затем пользователь должен нажать кнопку «Готово» на клавиатуре. – ragnarius

1

Расширение на ответ @ reecon в о touchesBegan. Я бы не рекомендовал использовать его, так как в итоге у вас будет прыгающая клавиатура вверх и вниз, когда пользователь несколько раз нажмет и поверят мне, это выглядит совершенно странно (по крайней мере, это было на iOS 7.1.1 в одном из моих проектов) ,

Я пошел бы на старый добрый полный экран UITapGestureRecognizer. Вы также можете использовать полный экран UISwipeGestureRecognizer с направлением down - он выглядел бы и чувствовал бы еще холоднее, как если бы пользователь скользил по клавиатуре.

Оба жеста добавляются через IB и не требуют установки кода.

Нажатие на «другие элементы управления» - это совершенно другая история, хотя вам придется делать все это вручную - никакие жесты вам не помогут.

+0

Ну, мой вопрос касался касания «других элементов управления» ... – ragnarius

2

Я всегда делаю это в viewDidLoad:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
[self.view addGestureRecognizer:tap]; 

, а затем реализовать:

- (void)dismissKeyboard 
{ 
    [self.view endEditing:YES]; 
} 

работает как шарм :)

+0

Спасибо, он работает полу-хорошо. Он работает, когда пользователь касается слайдера, но не тогда, когда он затрагивает сегментированный контроль. – ragnarius

+0

добавьте '[self purKeyboard]' в первую строку вашего метода действий для вашего сегментированного элемента управления, и он будет работать. – nburk

Смежные вопросы