在 UITableviewcell 中调用多个按钮
Posted
技术标签:
【中文标题】在 UITableviewcell 中调用多个按钮【英文标题】:call multiple button in a UITableviewcell 【发布时间】:2018-06-16 19:45:31 【问题描述】:我有一个带有 4 个按钮的 xib 文件,每个按钮都有一个功能,它必须在单击时启动。该函数必须获取数据,并且在获取数据后它应该执行一个segue。我只能使用 UITableViewCell 类型的 nib 并将其显示在 viewcontroller 内的 tableview 中。
在tableviewcell中点击时是否可以让每个按钮启动所需的功能,如果可以,我该怎么做。
我几天来一直在研究与我类似的问题,并尝试了所有建议的解决方案,但它们不起作用,例如
Show ViewController from XIB-file-Button - Swift
Perform segue from button in XIB
Swift - Segue from Button inside a cell
Perform segue from button in XIB
Perform Segue from Xib programmatically
【问题讨论】:
【参考方案1】:当然,在代码中将事件传递到操作中然后访问索引路径非常简单。
首先将目标添加到您的按钮。
button.addTarget(self, action: #selector(someAction(_:event:)), for: .touchUpInside)
然后使用此代码开始您的操作。
@objc func someAction(_ button: UIButton, event: UIEvent)
guard let location = event.allTouches?.first?.location(in: tableView),
let indexPath = tableView?.indexPathForItem(at: location)
else
return
// TODO: fetch data
performSegue(withIdentifier: "mySegueID", sender: button)
此外,如果您的数据是异步的,您可以使用 PromiseKit 之类的东西。 https://github.com/mxcl/PromiseKit
【讨论】:
函数在哪里,因为我获取数据的代码在 nib 类中 你可以创建一个控制器对象(继承自 NSObject 或什么都不继承)并从那里调用它。 像个视频模型? 如果你的设计是基于MVVM的那么肯定,否则你可以简单地把它称为控制器。以上是关于在 UITableviewcell 中调用多个按钮的主要内容,如果未能解决你的问题,请参考以下文章
“自上而下” UITableView 中的 UITableViewCell 中的多个按钮
如果 UITableViewCell 有多个按钮,那么处理触摸事件的最佳位置在哪里
UITableViewCell 在实现为 UITableView 的 FooterView 时无法识别按钮的操作,具有多个页脚视图
检测点击UITableViewCell中包含多个部分的UITableView的按钮
UITableViewCell UIButton选择[重复]
自定义 UITableViewCell 中的操作按钮调用的 UITableView reloadRows() 总是落后一步