没有情节提要的 TableView Cell 的 iOS Swift Segue

Posted

技术标签:

【中文标题】没有情节提要的 TableView Cell 的 iOS Swift Segue【英文标题】:iOS Swift Segue from TableView Cell without Storyboard 【发布时间】:2016-07-05 15:47:47 【问题描述】:

当您单击 tableView 的单元格时,我无法执行 segue。我在应用程序中根本没有使用情节提要(删除情节提要文件),并且想知道如何执行此转场。 注意:

    我的 tableView 与显示它的 viewController 位于不同的文件中。所以在我的 ViewController 我有这一行:

    让 tableView = MyTableView(restaurants_data: 餐厅, 框架: CGRect(), 风格: .Plain) view.addSubview(tableView)

    因此,由于 MyTableView.swift 是 didSelectRowAtIndexPath 函数所在的文件,因此我无法执行类似的操作

    self.navigationController?.showViewController(destinationVC, sender:nil)

那么,当用户单击单元格时,如果我使用的是自定义 TableView 而我的应用程序没有使用 StoryBoard,我该如何执行 segue? 提前非常感谢

【问题讨论】:

子类化 UITableView 可能不被推荐:***.com/a/10250358/1305067。如果您想封装UITableView,也许将其包装为视图控制器并将其作为子视图控制器添加到您的视图中可以满足您的需求。至于访问navigationController,请将其作为参数传递给您的MyTableView init 方法。顺便说一句,没有故事板,就没有转场,AFAIK - 所以只需使用通常的pushViewController 方法。 【参考方案1】:

在 tableView 中添加 viewController 的引用

并在 viewController init 中初始化它 var 控制器:UIViewController

controller.presentViewController(viewControllerToPresent: UIViewController, 动画: Bool, 完成: 块?>)

【讨论】:

那行不通,因为就像我上面所说的,方法“didSelectRowAtIndexPath”在 UITableView 类中,而不是在 UITableViewController 中。 UITableView 不包含 presentViewController 方法。 但是viewControllerToPresent.navigationController 确实有presentViewController 方法。 @paulvs 但调用 viewControllerToPresent.navigationController.pesentViewController(viewControllerToPresent: viewControllerToPresent., animated: Bool, completion ..) 根本没有意义,对吗? @EzeGom 让表视图实现它自己的委托听起来不是一个很棒的设计。但是,如果您想或必须使用它,您需要为表格视图提供某种方式来传递单元格选择事件。我建议定义一个协议:ItemSelectedHandler 和方法 view:selectedItem:,并在创建表视图时注入它的一个实例。 @Benjohn:我更改了设计并使其显示表格的 ViewController 也包含表格的委托和数据源,这是一个糟糕的设计实践吗?有什么建议吗?提前非常感谢。

以上是关于没有情节提要的 TableView Cell 的 iOS Swift Segue的主要内容,如果未能解决你的问题,请参考以下文章

使用情节提要的tableview自定义单元格标签不起作用

来自 Prototype Cell 的 pushViewController

访问使用情节提要添加的 tableView 标头

在没有情节提要的情况下使用 UITableView

在情节提要中连接 Cell Prototype 的插座

我可以在情节提要中设置分组的 tableView 部分编号吗?