假设我有一个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。
那我该怎么做?
答案 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