参见英文答案 >
Issue Detecting Button cellForRowAt 3个
> swift: how to get the indexpath.row when a button in a cell is tapped? 14个
我在UITableViewCell中有一个操作按钮,我想检测按钮的按下时间以及ViewController中按下的单元格编号,以便在ViewController.swift中创建音频播放列表.
> swift: how to get the indexpath.row when a button in a cell is tapped? 14个
我在UITableViewCell中有一个操作按钮,我想检测按钮的按下时间以及ViewController中按下的单元格编号,以便在ViewController.swift中创建音频播放列表.
我已经陷入这个问题一段时间了,我真的很赞赏你的建议.这是代码.
ViewController.swift
import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self tableView.register(UINib(nibName: "Cell",bundle: nil),forCellReuseIdentifier: "cell") } func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int { return 3 } func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! Cell return cell } }
Cell.swift
import UIKit class Cell: UITableViewCell { @IBOutlet weak var button: UIButton! @IBAction func buttonpressed(_ sender: Any) { ***[Code to send the pressed cell's number to ViewController]*** } }
解决方法
你可以选择一个老式的代表模式.这样做的好处是不会将视图控制器与单元格耦合.不要忘记让你的代表弱,以避免保留周期.
您可以从表视图中找到单元索引路径. (我假设按单元格编号表示索引路径)
protocol CellDelegate: class { func didTap(_ cell: Cell) } class Cell: UITableViewCell { weak var delegate: CellDelegate? @IBAction func buttonpressed(_ sender: Any) { delegate?.didTap(self) } } class ViewController: UIViewController,CellDelegate { func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = ... cell.delegate = self return cell } func didTap(_ cell: Cell) { let indexPath = self.tableView.indexPath(for: cell) // do something with the index path } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。