当所有文本字段都填写在uitableviewcell(SWIFT)中时如何启用按钮

Posted

技术标签:

【中文标题】当所有文本字段都填写在uitableviewcell(SWIFT)中时如何启用按钮【英文标题】:how to enable button when all textfields filled in tableviewcell(SWIFT) 【发布时间】:2018-10-26 08:54:20 【问题描述】:

我想在表格视图单元格中填写文本字段时启用视图控制器中的按钮。

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

对不起。我英语不成熟。

    button(viewController) isEnable = false 填充文本字段(在 tableviewcell 内) button(viewController) isEnable = true

1。视图控制器

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!

【问题讨论】:

检查这是否有帮助。 ***.com/questions/52063413/… 内部 viewDidLoad 单元格值将为零,并且它仅引用最后一个单元格,因此不要放置全局单元格。由于表格视图的可重用单元格,您需要维护数组以检查 tex 字段值是否为字段 【参考方案1】:

由于表格视图只包含一个单元格,您为什么要使用表格视图? 如果你真的需要使用表格视图,为什么不使用 static 单元格?


一个简单的解决方案是将目标/操作代码从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

【讨论】:

【参考方案2】:

一种选择是使用委托。

protocol CustomTableViewCellDelegate   
    func editingChanged(_ String: yourString)    
 

在表格视图单元格中

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 方法中将委托分配给单元格中的 self 。然后在其中实现委托。

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

【讨论】:

以上是关于当所有文本字段都填写在uitableviewcell(SWIFT)中时如何启用按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 UiTableviewCell 文本字段?

如果所有文本字段都填写在 ios 中,则启用按钮

当文本字段位于 uitableviewcell 中时,不调用 touchesBegan

当所有字段都被填写后,启用提交按钮

从 uitableviewcell 内的文本字段中关闭 iPad 上的键盘

必须填写两个文本字段之一