当所有文本字段都填入 tableviewcell(SWIFT) 时如何启用按钮
how to enable button when all textfields filled in tableviewcell(SWIFT)
当我在 tableviewcell 中填写文本字段时,我想启用 viewcontroller 中的按钮。
我不知道如何解决这个问题。
对不起。我的英语还不成熟。
- 按钮(viewController) isEnable = false
- 填充文本字段(在 tableviewcell 内)
- 按钮(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
}
}
当我在 tableviewcell 中填写文本字段时,我想启用 viewcontroller 中的按钮。
我不知道如何解决这个问题。
对不起。我的英语还不成熟。
- 按钮(viewController) isEnable = false
- 填充文本字段(在 tableviewcell 内)
- 按钮(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
}
}