Добавить протокол 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
}
}
Это проще, чем мое решение, но для UITextField, а не UITextView. Я предполагаю, что он может быть изменен, заменив Field на View? – Derek