SWIFT:将UITableViewCell连接到两个不同的详细视图控制器

时间:2019-08-20 19:06:36

标签: ios swift uitableview segue uistoryboardsegue

假设我有一个SWIFT应用程序,它包含一个带表的UIViewController。该表当然具有原型UITableViewCells。单元格中包含的信息可以是两种内部对象类型之一,例如Widget和Sprocket。 Widget和Sprocket是从相同的基类Thing派生的对象。

我的表将是事物列表,其中每个事物都是小部件或链轮。我想发生的是,如果用户选择一个表部件,它应该是一个小部件,它应该显示一个小部件,即WidgetViewController的详细信息ViewController。但是,如果用户选择一个Sprocket,则该应用应显示一个SprocketViewController。

我到底该如何实现?我的理解是,如果我进入情节提要板并单击并拖动以从主VC到WidgetViewController或SprocketViewController进行选择,则该选择将自动在应用程序中发生,即无需我添加任何代码。因此,如果我单击并拖动以创建两个这样的segue,那么我不知道会发生什么,但我认为该应用程序将因为尝试调用两个segue而崩溃。

我面临的问题是我当前的应用程序具有一个WidgetTableViewController,其故事板与WidgetViewController相连,还具有一个SprocketTableViewController,其故事板与SprocketViewController相连,但现在我必须将Widgets和Sprockets放入同一VC(例如ThingTableViewController),并让该应用有条件地启动WidgetViewController或SprocketViewController。

那我该怎么做?

2 个答案:

答案 0 :(得分:0)

一种执行此操作的方法可能是:

tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)的{​​{1}}函数中,检查所选单元格是对应于对象UITableViewDelegate还是对象Widget

然后,使用以下代码为相应的Sprocket进行必要的配置:

UIViewController

在情节提要中,将您认为方便的标识符分配给let vc = UIStoryboard(name: "The name of your storyboard here", bundle: nil).instantiateViewController(withIdentifier: "Your VC identifier") as! YourViewController // pass your data and configure the viewcontroller here navigationController?.pushViewController(vc, animated: true)

选择ViewController->第三项->身份-> StoryboardId并选中“使用Storyboard ID”

注意:删除此命令当前使用的是

答案 1 :(得分:0)

1)要配置单元,您需要数据源。因此,基本上,您可以仅使用这样的结构数组配置tableView。

struct ViewModel { var type: CellType ... }

当您点击类型点击单元格时,您可以轻松找到所需的细节控制器。

2)在didSelectRow中,您会感冒到抽头电池

    let cell = tableView.cellForRow(at: indexPath)

,而不仅仅是检查它是WidgetsCell还是SprocketsCell