2017-01-07 8 views
1

Новое в Swift и создание простого приложения.Скрытие UIButton при нажатии текстового поля на Swift

Я пытаюсь получить его так, что при нажатии на текстовый элемент пользовательского интерфейса определенная кнопка должна быть скрыта. Только когда пользователь нажимает клавишу ввода после ввода задачи, которую должна появиться кнопка.

У меня есть IBAction набор для моего текстового поля, чтобы скрыть UIButton, когда он нажал на, как это так, но это не работает:

@IBAction func textFieldClicked(_ sender: Any) { 

     self.cellButton.isHidden = true 

} 

И я настроил свою textfieldshouldreturn функцию, когда пользовательские нажатия вводятся так:

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    self.cellButton.isHidden = false 
    self.cellButton.isUserInteractionEnabled = true 
    textField.resignFirstResponder() 
    return true 
} 

Включает ли IBAction текстовое поле при нажатии клавиши ввода? Я попытался испортить флаги, но это тоже не сработало.

Любая помощь приветствуется.

ответ

3

Для этого вам не нужен IBAction. Вместо этого реализуйте еще один метод UITextFieldDelegate - textFieldDidBeginEditing.

func textFieldDidBeginEditing(_ textField: UITextField) { 
    self.cellButton.isHidden = true 
} 

Этот делегат вызывается, когда текстовое поле становится первым ответчиком.

На слегка несвязанной ноте, лучше всего вернуть false вместо true из вашего метода textFieldShouldReturn.

+0

Ничего себе, легко исправить, спасибо большое! Я всегда забываю обо всех методах делегата. Могу ли я спросить, почему вы говорите, что лучше всего вернуть false вместо true для метода textFieldShouldReturn? – brownmamba

+0

Это только проблема в одном неясном случае. См. [Этот вопрос] (http://stackoverflow.com/questions/21077842/uitextview-adding-new-line-unintentionally) и мой ответ для объяснения. – rmaddy

0

Пожалуйста, используйте метод делегатов textFieldDidDeginEditing и скройте кнопку.