从 tableView 委托类中调用视图控制器 segue

Posted

技术标签:

【中文标题】从 tableView 委托类中调用视图控制器 segue【英文标题】:call view controller segue from within tableView delegate class 【发布时间】:2014-09-10 23:59:45 【问题描述】:

我已将我的 tableView 委托和数据源与 tableView 控制器分开。到目前为止,它工作得很好。但是,我现在已经到了需要实现 didSelectRowAtIndexPath 委托方法的地方。调用此方法时,我需要从视图控制器执行 segue,但我没有从委托类内部对视图控制器的引用来调用方法,如 [myViewController performSegueWithIdentifier...

处理这个问题的正确方法是什么?我是否只是向我的委托添加一个属性来存储视图控制器?这似乎不是一个好主意,因为视图控制器已经引用了委托。我怎样才能引用回 VC?我在想我可以发布通知,但必须有比这更好的方法。我一直只是使用视图控制器作为委托,所以我以前从来没有处理过这个问题。

【问题讨论】:

【参考方案1】:

这个问题对我来说似乎很奇怪,因为如果您在情节提要中创建转场,例如从 tableView 单元格推送转场到另一个视图控制器,那么当点击 tableview 单元格时,转场会自动触发。你可以在

中做其他事情
- (void)prepareForSegue:(UIStoryboardSegue *)segue
                 sender:(id)sender

至于

向我的委托添加一个属性来存储视图控制器

没关系。因为

@property(nonatomic, assign) id< UITableViewDelegate > delegate

viewcontroller 不保留委托

【讨论】:

如果你使用从一个单元到另一个 VC 的 segue,那么你不能使用 didSelectRowAtIndexPath,因为它在 prepareForSegue 之后被调用。最初我将 segue 设置为手动 segue,这就是为什么我需要从我的委托的 didSelectRowAtIndexPath 中调用 performSegueWithidentifier 的原因。但是,我最终按照自己的方式进行操作,并将 segue 更改为从单元格到 VC,然后仅使用 prepareForSegue 并使用 self.tableView.indexPathForSelectedRow.row 来索引我的数据源。所以最后你是对的,我不需要任何我认为我做的事情。谢谢

以上是关于从 tableView 委托类中调用视图控制器 segue的主要内容,如果未能解决你的问题,请参考以下文章

UIView 类中的 Swift 集合视图委托

UIPickerView + TableViewCell + 委托和数据源

如何从自定义表格视图单元类中获取对表格视图控制器的引用

从委托类调用视图控制器方法,有问题

如何通过委托将信息从键盘视图控制器传递到主视图控制器

如何在其他视图中重新加载 TableView?