【问题标题】:textfield not empty show save button in Swift文本字段不为空在 Swift 中显示保存按钮
【发布时间】:2018-06-10 21:28:02
【问题描述】:

我的保存按钮被下面代码中的saveBtnHidden() 函数隐藏了。但是,在文本字段中输入文本时,保存按钮不会重新出现。我已经尝试了多种类似的解决方案。每次我在文本字段中输入时,保存按钮都不会显示。

import UIKit

class TableViewController: UITableViewController, UITextFieldDelegate {

    @IBOutlet weak var saveBtn: UIButton!
    @IBOutlet var nicknameField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        saveBtnHidden()      
    }

    func saveBtnHidden() {
        if (nicknameField.text?.isEmpty ?? true) {
            // is empty
            saveBtn.isHidden = true
        } else {
            saveBtn.isHidden = false
        }
    }

    @IBAction func saveBtnPressed(_ sender: Any) {
        performSegue(withIdentifier: "nextPage", sender: nil)
    }
}

【问题讨论】:

    标签: swift button textfield hidden visible


    【解决方案1】:

    您收到此错误是因为您的函数saveBtnHidden() 仅在viewDidLoad() 中调用一次。当您的文本字段中的文本发生更改时,它不会再次被调用。要检测文本何时更改,您需要在文本字段中添加一个目标,该目标在更改时调用函数 (.editingChanged),如下所示:

    nicknameField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
    

    然后在textFieldDidChange 调用你的saveBtnHidden() 函数:

    func textFieldDidChange(_ textField: UITextField) {
        saveBtnHidden() 
    }
    

    代码改编自:How do I check when a UITextField changes?

    【讨论】:

    • 做到了!我需要了解有关 textfielddidchange 的更多信息。如果我要添加多个文本字段,我会为每个字段重复此过程还是有办法将所有字段的组合加起来?
    • 对于多个文本字段,您可以将相同的目标添加到所有文本字段,如我的示例中所示。然后在 textFieldDidChange 函数中,您可以使用 `if textField ==nicknameField { do something } 检查哪个文本字段发生了变化
    • @LeoDabus 我无法让它适用于文本字段。我一定是在错误的区域输入了它。
    • @BlueMoose 添加开关switch textField { case nicknameField: // do something to nicknameField
    【解决方案2】:

    使用delegate 通知任何更改。 Delegates 是 iOS 开发和 Apple 框架的关键部分。

    class TableViewController: UITableViewController, UITextFieldDelegate {
    
        @IBOutlet weak var saveBtn: UIButton!
        @IBOutlet var nicknameField: UITextField!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            saveBtnHidden()    
    
            nicknameField.delegate = self   
        }
    
    
        func textFieldDidChange(_ textField: UITextField) {
            saveBtnHidden() 
        }
     // More of your source code below...
    

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2020-06-03
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多