2014-11-12 3 views
0

Текстовое поле содержит сборщик данных. И поскольку у сборщика нет кнопки Return, я должен как-то закрыть inputView. Я не хочу использовать inputAccessoryView, так что я, хотя , если пользователь снова нажимает текстовое поле, должно убрать текстовое поле. Но я не знаю, как обнаружить событие касания. Я подклассифицировал UITextField и перезаписал метод touchesBegan, но он никогда не будет вызван даже dow, если я установил userInteractionEnabled в false.Как я могу обнаружить, что активное текстовое поле снова тронуто?

Я попытался настроить распознаватель жесты касания, сначала он срабатывает, но второй раз нет.

class TextFieldCloseWhenTouched: UITextField { 

    override func didMoveToWindow() { 

     self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "tapped")) 
    } 

    func tapped() { 
     if self.isFirstResponder() { 
      self.resignFirstResponder() 
     } else { 
      self.becomeFirstResponder() 
     } 
    } 
} 

ответ

0

Вы можете добиться этого с помощью функции делегата (BOOL)textFieldShouldBeginEditing:(UITextField *)textField без подклассов TextField, но тогда вам нужно будет обрабатывать добавление и удаление сборщика к просмотру с анимацией себя, а не в качестве точки зрения ввода.

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    if(isTextFieldOpen){ 
    [self dismissDataPicker]; 
    } 
    else{ 
    [self showDataPicker]; 
    } 
    isTextFieldOpen=!isTextFieldOpen; 

    return NO; 

} 

Однако, я не думаю, что это лучший пользовательский опыт. Я думаю, что лучше добавить сборщик данных в UIView с помощью панели инструментов с кнопками «Готово/Отмена» или добавить распознаватель жестов к главному виду, когда отображается сборщик данных, когда пользователь нажимает в любом месте, где он уволен. Если это единственное текстовое поле на вашем экране, или вы все в порядке, чтобы закрыть все, нажав в любом месте, вы можете просто добавить следующую строку в ваш ViewController

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

меня Tableview за клавиатурой так touchBegin не работает, но в в конце я использовал inputAccessoryView и положил на него кнопку возврата. Думаю, я буду доволен этим. –

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