2015-10-20 59 views
1

我有一个UITableView类,我放在多个ViewControllers。从控制器触发从UITableView segue

我想在用户didSelectRowAtIndexPath时继续使用另一个ViewController。

但是,因为UITableView类是独立的,所以我不能从类中以编程方式触发seglog,因为selfself.performSegueWithIdentifierself.showViewController引用了UITableView。

据我所知,它是ViewControllers应该负责segues,但我不能从给定的ViewController访问didSelectRowAtIndexPath(因为它不管理UITableView)。

如何从不从ViewController继承的UITableView继承?

回答

0

首先,我想推荐Apple的文档Adding a Segue Between Scenes in a Storyboard

您绝对将您的UITableView放置在视图控制器上,并在故事板上设置UITableViewDelegate,UITableViewDataSource,以便您的视图控制器可以知道用户选择了哪一行。

1

您需要一种方法来告诉视图控制器已经选择了表格视图上的一行,以便视图控制器可以执行segue。

委托是启用此通信的好方法。

  1. 定义委托协议。

    protocol TableRowSelectionDelegate: class { 
        func tableRowSelected(rowValue: String) 
    } 
    
  2. 在你的表视图类中定义一个委托变量。

    var tableRowSelectionDelegate: TableRowSelectionDelegate? 
    
  3. 在表格视图类,当选择的表格行,调用该委托,传递行值(即,从对应于所选索引路径模型数据)。使用可选的?操作员,这样如果代表没有设置,没有什么不好的事情发生。

    tableRowSelectionDelegate?.tableRowSelected(rowValue) 
    
  4. 将协议添加到您的视图控制器。

    class ViewController: UIViewController, TableRowSelectionDelegate 
    
  5. 在您的视图控制器,将其设置为委托你的表视图类。

    tableViewClass.tableRowSelectionDelegate = self 
    
  6. 在您的视图控制器中实现协议。

    func tableRowSelected(rowValue: String) { 
        //perform the segue here... 
        // if necessary, pass the row value to the destination 
        // view controller before performing the segue 
    } 
    

此委托协议,现在可以通过使用你的表视图类中的所有视图控制器来实现,每个视图控制器可以但它要作出回应。也许你不会总是想要继续。让代表决定。

+0

难道你不觉得有一个不太好的方法来做到这一点? –

+0

根本不是一种冒险的方式。祝你好运。 –

相关问题