文本字段不显示在Swift中显示保存按钮

时间:2017-12-31 02:43:14

标签: swift button textfield hidden visible

我的保存按钮隐藏了下面代码中的函数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)
    }
}

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

使用delegate通知任何更改。代表是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...