Ios 在UISplitViewController中,如何使iPhone的主控打开细节视图控制器?
我有一个独特的Ios 在UISplitViewController中,如何使iPhone的主控打开细节视图控制器?,ios,swift,uisplitviewcontroller,Ios,Swift,Uisplitviewcontroller,我有一个独特的UISplitViewController设置(我想)。我的主视图控制器是导航控制器中的表视图控制器,这是正常的。但是,“我的详细视图”控制器是一个UITabBarController。每个选项卡都有一个导航控制器来包装其中的内容 当用户在主视图控制器中选择一个表行时,我在详细视图控制器中选择一个选项卡,并开始推送视图控制器: let detailViewController = masterViewController?.splitViewController .view
UISplitViewController
设置(我想)。我的主视图控制器是导航控制器中的表视图控制器,这是正常的。但是,“我的详细视图”控制器是一个UITabBarController
。每个选项卡都有一个导航控制器来包装其中的内容
当用户在主视图控制器中选择一个表行时,我在详细视图控制器中选择一个选项卡,并开始推送视图控制器:
let detailViewController = masterViewController?.splitViewController
.viewControllers[1] as? UITabBarController
let selectIndex = 2
let viewController = (detailViewController.viewControllers?[selectIndex] as? UINavigationController)?.viewControllers.first
detailViewController.selectIndex = selectIndex
viewController.show(myCustomViewController)
这在iPad上非常有效。。在主视图控制器表中选择一个项目,将选择局部视图控制器中的选项卡,并将视图控制器推送到该选项卡上
在iPhone上,我使用以下命令在初始加载时显示主视图控制器:
但是,在主视图控制器表中选择一行实际上没有任何作用。如何使详细视图控制器在选择主表中的某一行时显示?首先,您为什么需要这两种功能:
master detail
和Tab
。因为如果要使用tab实现master detail,则必须在master
中具有相同数量的选项卡和相同数量的行,然后只有在选择行时才能导航到该选项卡。在iPhone中,最多只有5个选项卡,如果您在Master
中有7行,那么如果用户单击第6行和第7行会发生什么
因为按照设计理念:您应该根据需求只选择一个
Master Detail
->提供了侧菜单等功能,因此用户可以从这些功能中访问更多选项TabBar
->提供更多选项,底部有菜单UITabBarController
。(我已经创建了名为CustomTabController
)的tabbarcontroller)中选择Rowat
,按下Tabbar控制器:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
let tabController = self.storyboard?.instantiateViewController(withIdentifier: "CustomTabController") as! CustomTabController
self.navigationController?.pushViewController(tabController, animated: true)
tab.selectedIndex = indexPath.row
}
else {
// iPad code here
}
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
let tabController = self.storyboard?.instantiateViewController(withIdentifier: "CustomTabController") as! CustomTabController
self.navigationController?.pushViewController(tabController, animated: true)
tab.selectedIndex = indexPath.row
}
else {
// iPad code here
}
}