我正在以编程方式创建UITabbarController
及其所有选项卡的内容,如下所示:
private func createTabBarController()
{
/* Only create tabBarController once! */
if (RootRouter._tabBarController == nil)
{
let firstPageViewController = FirstPageViewController(nibName: "FirstPageViewController", bundle: nil)
let secondPageViewController = SecondPageViewController(nibName: "SecondPageViewController", bundle: nil)
let thirdPageViewController = ThirdPageViewController(nibName: "ThirdPageViewController", bundle: nil)
let thirdPageNavigationController = ThirdPageNavigationController(rootViewController: thirdPageViewController)
let fourthPageViewController = FourthPageViewController(nibName: "FourthPageViewController", bundle: nil)
thirdPageViewController.loadViewIfNeeded()
RootRouter._tabBarController = UITabBarController()
RootRouter._tabBarController?.viewControllers =
[
firstPageViewController,
secondPageViewController,
thirdPageNavigationController,
fourthPageViewController
]
/* This shouldn't be necessary! */
let tabCount = RootRouter._tabBarController!.viewControllers?.count ?? 0
for i in 0 ..< tabCount
{
RootRouter._tabBarController?.selectedIndex = i
}
}
}
如果我注释掉此方法的最后一部分,则选项卡将在应用程序启动时无法正确初始化:仅显示前三个选项卡按钮,而没有突出显示它们。
如果启用了最后一个代码部分,它将可以正常工作,并且看起来正确,但是这种方法似乎很简单,我认为稍后可能会导致副作用。我缺少正确初始化所有选项卡(和选项卡按钮)的东西吗?
答案 0 :(得分:1)
此属性名义上表示指向数组的索引 viewControllers属性。但是,如果选择的视图控制器是 当前More导航控制器,此属性包含 值
NSNotFound
您必须选择一次索引。
而不是这样做
let tabCount = RootRouter._tabBarController!.viewControllers?.count ?? 0
for i in 0 ..< tabCount
{
RootRouter._tabBarController?.selectedIndex = i
}
这样做:
RootRouter._tabBarController?.selectedIndex = 0 // Any other index
您的方法没有错,但是不需要RootRouter._tabBarController?.selectedIndex
的迭代调用。