当所有文本字段都填入 tableviewcell(SWIFT) 时如何启用按钮

how to enable button when all textfields filled in tableviewcell(SWIFT)

当我在 tableviewcell 中填写文本字段时,我想启用 viewcontroller 中的按钮。

我不知道如何解决这个问题。

对不起。我的英语还不成熟。

  1. 按钮(viewController) isEnable = false
  2. 填充文本字段(在 tableviewcell 内)
  3. 按钮(viewController)isEnable = true

1。 ViewController

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

    @IBOutlet var tableView: UITableView!
    @IBOutlet var viewLabel: UILabel!
    @IBOutlet var clickBtn: UIButton!

    var cell: CustomTableViewCell!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.clickBtn.isEnabled = false
        cell.textFieldCell.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        cell.textFieldCell2.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    }

    @objc func editingChanged(sender: UITextField) {

        sender.text = sender.text?.trimmingCharacters(in: .whitespaces)

        guard
            let text1 = cell.textFieldCell.text, !text1.isEmpty,
            let text2 = cell.textFieldCell2.text, !text2.isEmpty
            else
        {
            self.clickBtn.isEnabled = false
            return
        }
        clickBtn.isEnabled = true
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! CustomTableViewCell
        return cell
    }
}

2。自定义表格视图

import UIKit

class CustomTableViewCell: UITableViewCell, UITextFieldDelegate {

    @IBOutlet var myLabel: UILabel!
    @IBOutlet var textFieldCell: UITextField!
    @IBOutlet var textFieldCell2: UITextField!
}

由于 table 视图仅包含一个单元格,为什么您完全使用 table 视图?
如果您真的需要使用 table 视图,为什么不使用 static 单元格?


一个简单的解决方案是将 target/action 代码从 viewDidLoad 移动到单元格

didSet 属性 观察者中
var cell: CustomTableViewCell! {
    didSet {
        cell.textFieldCell.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        cell.textFieldCell2.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.clickBtn.isEnabled = false
}

一种选择是使用委托。

protocol CustomTableViewCellDelegate  { 
    func editingChanged(_ String: yourString)    
} 

在 table 查看单元格

class TableViewCell: UITaleViewCell { 
    // declare the delegate 
    var delegate: CustomTableViewCellDelegate? 
    // and pass it like this from where you want to pass 
    delegate?.editingChanged(cookie) 
}

用于 tableViewController。首先在 indexpath 方法的行单元格中将委托分配给自己。然后在里面实现delegate。

extension CustomTableViewController: CustomTableViewCellDelegate { 
    func editingChanged(String: yourString) { 
    // use it accordingly 
    } 
}