Select 选项卡并在加载的视图上更改段
Select tab and change segment on the view loaded
我希望能够以编程方式 select UITabBarController 上的选项卡,然后访问加载的视图以设置默认加载的段。
例如,如果我有一个菜单并单击标题为 'A/B' 的按钮,我希望它进入 select 'A' 选项卡,然后是 'B' 部分。如果我单击标题为 'A/C' 的按钮,我希望它进入 select 'A' 选项卡,然后是 'C' 部分。
问题的第一部分我设法弄清楚了如下:
class TabBarController: UITabBarController {
...
func selectTab(name: String) {
for tab in self.viewControllers! {
if(name == tab.tabBarItem.title) {
self.selectedViewController = tab
return
}
}
}
}
不过我不确定如何获取自动打开的视图。执行此操作的最佳方法是什么?
非常感谢!
最后,我意识到我可以从 self.selectedViewController
获取导航控制器,然后使用 topViewController
从中获取视图控制器。
例如,如果我有一个名为 NavigationController
的导航控制器和一个名为 GroupsViewController
的视图控制器,我可以执行以下操作:
func selectTab(name: String, contentType: ContentType? = nil) {
for tab in self.viewControllers! {
if(name == tab.tabBarItem.title) {
self.selectedViewController = tab
if let nc = self.selectedViewController as? NavigationController{
if let vc = nc.topViewController {
if let gvc = vc as? GroupsViewController {
gvc.activeContentType = contentType
}
}
}
return
}
}
}
请注意,我必须设置要在 ViewDidAppear
中使用的变量(ContentType 类型),而不是像我最初计划的那样访问段控件(因为尽管选项卡可能存在,但视图控制器可能还没有加载)。
我希望能够以编程方式 select UITabBarController 上的选项卡,然后访问加载的视图以设置默认加载的段。
例如,如果我有一个菜单并单击标题为 'A/B' 的按钮,我希望它进入 select 'A' 选项卡,然后是 'B' 部分。如果我单击标题为 'A/C' 的按钮,我希望它进入 select 'A' 选项卡,然后是 'C' 部分。
问题的第一部分我设法弄清楚了如下:
class TabBarController: UITabBarController {
...
func selectTab(name: String) {
for tab in self.viewControllers! {
if(name == tab.tabBarItem.title) {
self.selectedViewController = tab
return
}
}
}
}
不过我不确定如何获取自动打开的视图。执行此操作的最佳方法是什么?
非常感谢!
最后,我意识到我可以从 self.selectedViewController
获取导航控制器,然后使用 topViewController
从中获取视图控制器。
例如,如果我有一个名为 NavigationController
的导航控制器和一个名为 GroupsViewController
的视图控制器,我可以执行以下操作:
func selectTab(name: String, contentType: ContentType? = nil) {
for tab in self.viewControllers! {
if(name == tab.tabBarItem.title) {
self.selectedViewController = tab
if let nc = self.selectedViewController as? NavigationController{
if let vc = nc.topViewController {
if let gvc = vc as? GroupsViewController {
gvc.activeContentType = contentType
}
}
}
return
}
}
}
请注意,我必须设置要在 ViewDidAppear
中使用的变量(ContentType 类型),而不是像我最初计划的那样访问段控件(因为尽管选项卡可能存在,但视图控制器可能还没有加载)。