如何将 tableViewCell 中 Button 的文本 print/pass 转换为 Swift 中的另一个 ViewController?
How to print/pass the text of a Button in a tableViewCell to another ViewController in Swift?
我想在单击特定 tableViewCell 时打印按钮的文本。还要注意,单击也会关闭视图。请帮我解决这个问题
下面是我试过的代码:
extension AlertViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return flags.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let flag = flags[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "FlagTableViewCell") as! FlagTableViewCell
cell.setUp(flag: flag)
//clickedFlagName = cell.flagNameLbl.text!
// print("Clickeeeeeeeeeeddddddd" + "\(clickedFlagName)")
clickedFlagName = cell.flagNameBtn.title(for: .normal)!
print("WhennnnClickeeeeeeeeeeddddddd " + "\(clickedFlagName)")
cell.flagNameBtn.addTarget(self, action: #selector(self.clickedFlagAction), for: .touchUpInside)
return cell
}
@objc func clickedFlagAction(_ sender: Any?) {
print("Tapped")
dismiss(animated: true)
}
}
使用没有附加操作但带有 IBOutlet 的按钮设置您的 FlagTableViewCell。我们称它为 flagCellButton
.
在你的tableView(_:cellForRowAt:)
方法中,
出列一个单元格并将其转换为 FlagTableViewCell
类型,就像您现在所做的那样。然后在 flagCellButton 上调用 removeTarget(_:action:for:)
,为目标和操作传入 nil,并为控制事件传入 .touchUpInside
。 (这会清除回收单元格中的所有操作。)
调用 cell.flagCellButton.addTarget(_:action:for:)
从您的视图控制器向单元格添加 IBAction。
设置您的 IBAction 以期望发件人是 UIButton 类型。在那个 IBAction 中,获取发件人的标题,并将该标题传递给新的视图控制器,然后关闭当前的视图控制器。
编辑:
请注意,如果您将应用设置为要求 iOS >= v 14,则可以使用 UIControl
中的新方法,让您将 UIAction
附加到 button/control 而不是 target/action。 UIAction
的优点是它采用闭包而不是选择器,因此您可以提供代码 in-line 而不必在视图控制器中定义 IBAction 方法。您将使用类似的方法从按钮中删除旧的 `UIAction 并添加一个新的。
我想在单击特定 tableViewCell 时打印按钮的文本。还要注意,单击也会关闭视图。请帮我解决这个问题
下面是我试过的代码:
extension AlertViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return flags.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let flag = flags[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "FlagTableViewCell") as! FlagTableViewCell
cell.setUp(flag: flag)
//clickedFlagName = cell.flagNameLbl.text!
// print("Clickeeeeeeeeeeddddddd" + "\(clickedFlagName)")
clickedFlagName = cell.flagNameBtn.title(for: .normal)!
print("WhennnnClickeeeeeeeeeeddddddd " + "\(clickedFlagName)")
cell.flagNameBtn.addTarget(self, action: #selector(self.clickedFlagAction), for: .touchUpInside)
return cell
}
@objc func clickedFlagAction(_ sender: Any?) {
print("Tapped")
dismiss(animated: true)
}
}
使用没有附加操作但带有 IBOutlet 的按钮设置您的 FlagTableViewCell。我们称它为 flagCellButton
.
在你的tableView(_:cellForRowAt:)
方法中,
出列一个单元格并将其转换为 FlagTableViewCell
类型,就像您现在所做的那样。然后在 flagCellButton 上调用 removeTarget(_:action:for:)
,为目标和操作传入 nil,并为控制事件传入 .touchUpInside
。 (这会清除回收单元格中的所有操作。)
调用 cell.flagCellButton.addTarget(_:action:for:)
从您的视图控制器向单元格添加 IBAction。
设置您的 IBAction 以期望发件人是 UIButton 类型。在那个 IBAction 中,获取发件人的标题,并将该标题传递给新的视图控制器,然后关闭当前的视图控制器。
编辑:
请注意,如果您将应用设置为要求 iOS >= v 14,则可以使用 UIControl
中的新方法,让您将 UIAction
附加到 button/control 而不是 target/action。 UIAction
的优点是它采用闭包而不是选择器,因此您可以提供代码 in-line 而不必在视图控制器中定义 IBAction 方法。您将使用类似的方法从按钮中删除旧的 `UIAction 并添加一个新的。