UIButton如何同时侦听对其他Button的更改,对UILabel的文本的更改以及对UITextView的更改

时间:2018-10-01 21:56:11

标签: ios swift uibutton uitextfield uilabel

我的vc包含:

-1名称textView

-1标签//用于调味

-2单选按钮//是和否

-1 nextButton

我想做的是保持nextButton禁用,直到textView填写完毕,标签的文本值从其初始标题“ Pick a Flavor”更改为他们选择的口味,并选择其中一个单选按钮

我知道使用te​​xtView的gr.df可以在用户完成编辑禁用或启用nextButton后听其更改。

textViewDidEndEditing()

除了检查nameTextView中是否包含文本之外,我还如何根据是否选择了一个单选按钮来禁用或启用nextButton以及更改标签的文本? < / p>

仅供参考,标签文本最初使用“选择口味”设置。我有一个手势识别器连接到它,当点击它时,将显示一个带有tableView的新vc。用户选择一种口味,协议将其发送回该vc,并且标签文本将更改为所选的任何口味(例如,如果选择,标签标题将显示“ Butter Pecan”)。只要标签的标题仍设置为“ Pick a Flavor”,就应禁用nextButton。

代码:

func textViewDidEndEditing(_ textView: UITextView) {
    handleTextInputChanged()
}

@objc func handleTextInputChanged() {
    let isFormValid = nameTextView.text?.count ?? 0 > 0

    if isFormValid {
        nextButton.isEnabled = true
        nextButton.backgroundColor = .red
    } else {
        nextButton.isEnabled = false
        nextButton.backgroundColor = .lightgray
    }
}

1 个答案:

答案 0 :(得分:0)

您需要创建一个检查所有此类功能的功能

func checkAll() {
    nextButto.isEnabled = flavorLabel.text != "Pick a Flavor" &&
    nameTextField.text != "" &&
    (noButton.someProerty != || yesButton.someProerty != )
}

并从文本字段和按钮目标中调用它

var ob:NSKeyValueObservation?

ob = flavorLabel.observe(\.text,options:[.new], changeHandler: { [unowned self] _, change in

   self.checkAll()
}

我离开了无线电检查,因为它们都是自定义的,所以您应该知道要检查什么,然后可以在目标方法内将selected的tag设置为1并根据它或您想要的其他逻辑进行检查