2016-07-13 3 views
1

Я использую текстовое представление внутри ячейки таблицы. Другие клетки связаны с перетекает, поэтому мне нужно следующее поведение:Использование UITextView в UITableViewController - нажмите снаружи, чтобы отклонить клавиатуру

  1. (по умолчанию) При нажатии на других строках таблицы триггеров соответствующих Segue

  2. Касание внутри вида текста начинается редактирование и показывает клавиатуру

  3. Если клавиатура видна, то нажатие на нее за пределами текстового вида отклоняет клавиатуру, но не соответствует секциям

  4. После того, как клавиатура была уволена, последующий ответ s на segues.

ответ

3

1. Принять метод textView делегата и

textView.delegate = self 

2. Добавить глобальное свойство

var tap = UITapGestureRecognizer()

3. Реализовать textView методы делегата

func textViewDidBeginEditing(textField: UITextView) { self.tableView.allowsSelection = false tap = UITapGestureRecognizer(target: self, action: #selector(self.Tapped)) self.view.addGestureRecognizer(tap) }

func textViewDidEndEditing(textField: UITextView) { self.tableView.allowsSelection = true self.view.removeGestureRecognizer(tap) }

4. Реализовать резьбовыми()

func Tapped(){ view.endEditing(true) }

Примечание: Это также работает для UITextField, замена Вид с поля на протяжении

+0

Это проще, чем мое решение, но для UITextField, а не UITextView. Я предполагаю, что он может быть изменен, заменив Field на View? – Derek

0

Добавить протокол UITextViewDelegate в класс и добавить эти переменные

var textViewIsEditing:Bool = false 
var tap: UITapGestureRecognizer! 

переопределяете функцию viewdidload так, чтобы tableViewController прослушивает события с точки зрения текста.

также добавить UITapGestureRecognizer, который будет запускать пользовательскую функцию handleTap

override func viewDidLoad() { 
    super.viewDidLoad() 

    myTextView.delegate = self 

    tap = UITapGestureRecognizer(target: self, action: #selector(MyClass.handleTap)) 
    tap.cancelsTouchesInView = false 
    self.view.addGestureRecognizer(tap) 

} 

Добавить две функции для переключения textViewIsEditing на основе ли TextView редактируется

func textViewDidEndEditing(textView: UITextView) { 
    textViewIsEditing = false 
} 

func textViewDidBeginEditing(textView: UITextView) { 
    textViewIsEditing = true 
} 

Теперь добавьте пользовательскую функцию handleTap в решить, как обращаться с кранами:

func handleTap(thisGestureRecognizer:UITapGestureRecognizer){ 

    if(textFieldIsEditing){ 
     // ignore this tap if editing text field but end editing 
     tap.cancelsTouchesInView = true 
     view.endEditing(true) 
    }else{ 
     // proceed as normal 
     tap.cancelsTouchesInView = false 
    } 

} 

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

  • Нет связанных вопросов^_^