标签栏中的项目在加载时不可见

时间:2015-04-18 20:48:33

标签: ios uitableview swift

我有一个tabBarController和两个UINavigationControllers UITableViews附加到tabBarController。见下图。

<code>tabBarController</code> setup

我已将tabBarController子类化,因此我可以通过引用在两个表之间传递一组自定义对象。但是,每当我加载标签时,项目都不会出现。它们仍然可以被选中但你却看不到它们。下图显示tabBar没有items显示

<code>tabBar</code> with <code>items</code> not visible

我有一种感觉,因为我正在实例化viewControllers并且UINavigationController未加载。我只是不确定如何首先加载UINavigationController

我使用的代码如下:

var table1 : AllPlacesViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AllPlaces") as AllPlacesViewController

var table2:AttendingPlacesTableViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AttendingPlaces") as AttendingPlacesTableViewController

table1.delegate = self
table2.delegate = self

var navController1 = UINavigationController(rootViewController: table1)
var navController2 = UINavigationController(rootViewController: table2)

self.viewControllers = [navController1, navController2]

我这样设置它的原因是因为我希望通过引用在viewControllers之间共享数据。

3 个答案:

答案 0 :(得分:1)

您是否使用“编辑器|嵌入”选项将导航控制器嵌入Tabbar?这非常重要!带有导航控制器的Tabbars在旧版本中是个问题,但是这个XCode函数有助于解决我认为的这类问题。

答案 1 :(得分:0)

通过在代码中设置一组不同的视图控制器,您将覆盖在故事板中设置的所有内容。无需在代码中创建任何这些对象,因为它们将由故事板实例化。

修改

相反,为每个Segues设置唯一标识符,并在自定义标签栏控制器中覆盖'prepareForSegue'方法

// MARK: - Segue handling

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == kSegue_YourSegueIdentifier {
        if let viewController : YourCustomVC = segue.destinationViewController as? YourCustomVC {
            viewController.delegate = self
        }
    }
}

调整方法以检查所有相关的segue标识符,或者在UINavigationControllers的情况下,获取它的根视图控制器以设置委托等。

我对图像中的故事板没有给予足够的重视。标签栏视图控制器的选项卡和导航控制器的根视图控制器segue将没有segue标识符。

您可以通过迭代viewControllers中的标签栏控制器的viewDidLoad数组来直接访问它们。

编辑2:

您可以轻松地遍历视图控制器

    for viewController in self.tabBarController!.viewControllers! {
        if let navigationController = viewController as? UINavigationController {
            if let yourCustomVC = navigationController as? YourCustomVCClass {
                yourCustomVC.delegate = self
            }
        }
    }

答案 2 :(得分:0)

在代码中创建navigationControllers,忽略了一个故事板UINavigationControllers,UITabBarItem会自动为您创建UITabBarItem,这就是为什么你什么也看不见。 您还需要为每个自定义navigationControllers

创建一个UITabBarItem