textViewDidBeginEditing на 2 отдельных textViews в быстром - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть 2 отдельных textView, которые я хочу вызвать событие, когда каждый из них коснулся.termTextView срабатывает нормально, но когда termTextView запускается первым, DefinitionTextView не срабатывает при нажатии.Что я могу сделать, чтобы решить эту проблему?

extension saveScreenViewController: UITextViewDelegate {
    func textFieldDidBeginEditing(_ textField: UITextField) {

    }
    func textViewDidBeginEditing(_ termTextView: UITextView){
        if(self.termTextView.text == "type term here..."){
        termTextView.text = ""
        termTextView.textColor = #colorLiteral(red: 0.1298420429, green: 0.1298461258, blue: 0.1298439503, alpha: 1)
        }
    }

    private func textViewDidBeginEditing2(_ definitionTextView: UITextView) {
        if(self.definitionTextView.text == "type definition here..."){
        definitionTextView.text = ""
        definitionTextView.textColor = #colorLiteral(red: 0.1298420429, green: 0.1298461258, blue: 0.1298439503, alpha: 1)
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Это не то, как вы используете UITextViewDelegate.Тот же метод делегата вызывается, когда редактирование начинается в любом текстовом представлении, делегат которого настроен на эту цель.Вы должны проверить внутри него, чтобы узнать, какое текстовое представление вызвало его.

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView === termTextView {
        // do something to termTextView
    } else if textView === definitionTextView {
        // do something to definitionTextView
    } else {
        // handle other text views
    }
}
0 голосов
/ 29 сентября 2018

Как Текстовое руководство по программированию для отслеживания нескольких текстовых полей и кодировок textViews, лучше использовать один метод делегата для управления ими, а не отдельные настраиваемые методы делегата (возможно, за исключением случаев, когда это необходимо).Вы можете использовать два разных стиля, чтобы приблизиться к этому руководству

1.Установите тег для каждого из TextView, и ваш метод делегата должен выглядеть следующим образом:

func textViewDidBeginEditing(_ textView: UITextView) {
  switch texView.tag {
    case 1:
       //Handle Text View with tag 1
       return
    case 2:
       //Handle Text View with tag 1
       return
   default:
       return
   }

2. Используйте ваш определенный textViewobject

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView == termTextView {
       //Do sth to termTextView
    } else if textView == definitionTextView {
       //Do sth to definitionTextView
    }
}

В вашем случае, если вам нужно использовать несколько методов делегата, просто используйте:

func textViewDidBeginEditing(_ definitionTextView: UITextView)

вместо:

private func textViewDidBeginEditing2(_ definitionTextView: UITextView)

Надеюсь, это поможетвы.

0 голосов
/ 29 сентября 2018

вам нужно изменить private func textViewDidBeginEditing2(_ definitionTextView: UITextView) на func textViewDidBeginEditing(_ definitionTextView: UITextView)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...