2015-02-24 3 views
1

Я пытаюсь убрать клавиатуру, когда пользователь выбирает что-то отличное от textFiled. Я пробовал следующее:Отключить клавиатуру, когда пользователь удаляет текст textField

- (void)viewDidLoad { 
    mytextField1.delegate = self; 
    mytextFiled2.delegate = self; 
} 

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

Это не сработало. Затем я попробовал [... resignFirstResponder] в touchesBagan, и это тоже не сработало. Я делаю что-то неправильно? Почему это не работает?

ответ

0

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

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

Затем, когда этот метод называется, отмените первый ответчик, чтобы убрать клавиатуру.

- (void)viewTapped 
{ 
    if (self.textField.isFirstResponder) { 
     [self.textField resignFirstResponder]; 
    } 
} 
+0

Не могу я просто сделать: '[self.view endEditing: YES];' и отменить утверждение if? –

+0

Да, это тоже сработает. – keithbhunter

0

Вы пытались добавить UITapGestureRecognizer в супервизор текстового поля, который отклоняет клавиатуру?

0

Вы можете использовать UITapGestureRecognizer. А также сохраните текущий сфокусированный TextField на activeTF. Вы должны установить текущий контроллер представления как делегат UITextField (s).

UITextField *activeTF; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    ....... 

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


- (void)dismissKeyboard { 
    if (activeTF) { 
     [activeTF resignFirstResponder]; 
    } 
} 

#pragma mark - TextField Delegate 

-(void)textFieldDidBeginEditing:(UITextField *)sender 
{ 
    activeTF = sender; 
} 

- (void)textFieldDidEndEditing:(UITextField *)sender 
{ 
    activeTF = nil; 
} 
Смежные вопросы