我有一个UITableView类,我放在多个ViewControllers中。
我想在用户didSelectRowAtIndexPath
。
但是,因为UITableView类是独立的,所以我无法从类中以编程方式触发segues,因为self
或self.performSegueWithIdentifier
中的self.showViewController
引用了UITableView。 / p>
我知道ViewControllers应该负责segues,但我无法从给定的ViewController访问didSelectRowAtIndexPath
(因为它不管理UITableView)。
如何从不从ViewController继承的UITableView中删除?
答案 0 :(得分:1)
您需要一种方法告诉视图控制器已选择表视图上的一行,以便视图控制器可以执行segue。
委托是启用此通信的好方法。
定义委托协议。
protocol TableRowSelectionDelegate: class {
func tableRowSelected(rowValue: String)
}
在表视图类中定义委托变量。
var tableRowSelectionDelegate: TableRowSelectionDelegate?
在表视图类中,选择表行时,调用委托,传递行值(即模型中与所选索引路径对应的数据)。使用可选?运算符,如果未设置委托,则不会发生任何不良事件。
tableRowSelectionDelegate?.tableRowSelected(rowValue)
将协议添加到视图控制器。
class ViewController: UIViewController, TableRowSelectionDelegate
在视图控制器中,将其设置为表视图类的委托。
tableViewClass.tableRowSelectionDelegate = self
在视图控制器中实现协议。
func tableRowSelected(rowValue: String) {
//perform the segue here...
// if necessary, pass the row value to the destination
// view controller before performing the segue
}
此委托协议现在可以由使用表视图类的所有视图控制器实现,并且每个视图控制器都可以响应它想要的。也许你不会总是想要贬低。让代表决定。
答案 1 :(得分:0)
首先,我想推荐Apple的文档Adding a Segue Between Scenes in a Storyboard。
您肯定将UITableView放在视图控制器上并在故事板上设置UITableViewDelegate,UITableViewDataSource,以便您的视图控制器可以知道用户选择哪一行。