Отключить кнопку, когда пользователь очищает текст из uitextfield

Я могу отключить кнопку, когда представление загружается в первый раз. Даже когда textfield пустой. Но после отправки сообщения, когда я набираю и удаляю текст с textfield, он не работает. Взаимодействие с button по-прежнему работает, и пользователь может отправить пустое сообщение, которое ему не нужно. Я хотел по-прежнему отключать кнопку, когда пользователь вводит и удаляет текст, если они передумают. Вот мой код.

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var sendButton: UIButton!

override func viewDidLoad() {
        super.viewDidLoad()
        self.textField.delegate = self
        if textField.text!.isEmpty {
            sendButton.isUserInteractionEnabled = false
        }
    }

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)

        if !inputText.isEmpty {
            sendButton.isUserInteractionEnabled = true
        } else {
            sendButton.isUserInteractionEnabled = false
        }
        return true
    }

Вы должны проверить textField.text!.isEmpty, в inputText нет необходимости.

Dávid Pásztor 31.10.2018 11:57

@ mandem112, я обновил свой ответ, пожалуйста, проверьте

Abhinav Jha 31.10.2018 12:34
0
2
145
6

Ответы 6

В какой-то момент вашего кода вы будете делать

self.textField.text = ""

После этого ваш делегат не будет вызван. Сразу после установки пустого текстового поля вам необходимо отключить кнопку.

В viewDidLoad:

textField.addTarget(self, action: #selector(textChange(_:)), for: UIControl.Event.editingChanged)

Действие:

@objc func textChange(_ textField: UITextField) {
        if !textField.text!.isEmpty {
            sendButton.isUserInteractionEnabled = true
        } else {
            sendButton.isUserInteractionEnabled = false
        }
    }
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    sendButton.isUserInteractionEnabled = false
    if !textField.text.isEmpty {
        sendButton.isUserInteractionEnabled = true
    } else {
        sendButton.isUserInteractionEnabled = false
    }
    return true
}

Проверьте с помощью кода выше

Добавьте слушателя для своего текстового поля, для которого вы хотите отключить кнопку действия, подобную этой, в своем методе viewDidLoad

textField.addTarget(self, action: #selector(actionTextFieldIsEditingChanged), for: UIControlEvents.editingChanged)

И при вызове этого метода проверьте, пусто ли текстовое поле:

@objc func actionTextFieldIsEditingChanged(sender: UITextField) {
     if sender.text.isEmpty {
       sendButton.isUserInteractionEnabled = false
     } else {
       sendButton.isUserInteractionEnabled = true
     }
  }

Чем этот ответ отличается от ответа это, опубликованного ниже Сатишем?

Rakesha Shastri 31.10.2018 12:17

Это не работает. По-прежнему та же проблема, что и раньше

mandem112 31.10.2018 12:21

@RakeshaShastri Привет .. Я дал свой ответ .. Просто совпадение, что наш ответ похож.

SachinVsSachin 31.10.2018 12:34

@SachinVsSachin, это то же самое. Вы были бы уведомлены, когда будут опубликованы ответы, и вы могли бы проверить, опубликовал ли кто-то такой же ответ.

Rakesha Shastri 31.10.2018 12:36

Я не был уведомлен. иначе я бы не отправил ответ, а разница во времени всего 3 мин.

SachinVsSachin 31.10.2018 12:39

Приведенный ниже код может вам помочь, я реализовал ту же функцию.

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var sendButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()
    self.textField.delegate = self
    if textField.text!.isEmpty {
        sendButton.isUserInteractionEnabled = false
    }

    textField.addTarget(self, action: #selector(ModifiedTextField.textFieldDidChange(_:)), for: UIControlEvents.editingChanged)
}

@objc func textFieldDidChange(_ textField: UITextField) {
    if !textField.isEmpty {
        sendButton.isUserInteractionEnabled = true
    } else {
        sendButton.isUserInteractionEnabled = false
    }
}

или вы можете попробовать создать действие кнопки и применить условие ниже

@IBAction func sendButtonClicked(sender:UIButton) {
    if !textField.isEmpty{
    // perform your action here
    }

}

он не выполнит код, если текстовое поле пусто

Чем этот ответ отличается от ответа это, опубликованного ниже Сатишем?

Rakesha Shastri 31.10.2018 12:18

это то же самое, я потратил немного больше времени на публикацию ответа

Abhinav Jha 31.10.2018 12:20

Тогда почему бы не проголосовать за это вместо публикации дубликата?

Rakesha Shastri 31.10.2018 12:21

@AbhinavJha Я пробовал это много раз, но все еще не работает. Благодарность

mandem112 31.10.2018 12:55

Я пробовал все вышеперечисленные решения, но ни одно из них не работает. Я опробовал эту реализацию, и она единственная, которая мне подходит.

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var sendButton: UIButton!

 override func viewDidLoad() {
     super.viewDidLoad()
     self.textField.delegate = self
     if textField.text!.isEmpty {
        sendButton.isUserInteractionEnabled = false
   }
 }

@IBAction func sendButton(_ pSender: UIButton) {
        generateMessages()
        self.sendButton.isUserInteractionEnabled = !(self.textField.text!.isEmpty)
 }

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
        self.sendButton.isUserInteractionEnabled = !inputText.isEmpty
        return true
  }

Другие вопросы по теме