当所有文本字段都填写在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 中时,不调用 touchesBegan