【问题标题】:material components tab bar controller error材质组件标签栏控制器错误
【发布时间】:2018-02-10 15:29:57
【问题描述】:

使用 MDCTabBarViewController 选择选项卡栏项目时收到错误:“由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'无效项目'”。视图控制器加载但在选择第二个选项卡后立即崩溃。

    class BusTabBarController: MDCTabBarViewController {

        override func viewDidLoad() {
            super.viewDidLoad()

            view.backgroundColor = .white
            loadTabBar()
        }

        func loadTabBar() {

            let firstVC = BusStopFlexibleHeaderContainerViewController()
            let secondVC = BookmarksFlexibleHeaderContainerViewController()
            let thirdVC = UIViewController()

            let viewControllersArray = [firstVC, secondVC, thirdVC]
            viewControllers = viewControllersArray

            let childVC = viewControllers.first
            selectedViewController = childVC

            tabBar?.delegate = self

            tabBar?.items = [UITabBarItem(title: "Recents", image: nil, tag: 0),
                         UITabBarItem(title: "Favorites", image: nil, tag: 0),                                                           
                         UITabBarItem(title: "YAY", image: nil, tag: 2)]

            tabBar?.selectedItem = tabBar?.items.first

            tabBar?.backgroundColor = MDCPalette.grey.tint900
            tabBar?.selectedItemTintColor = .white
            tabBar?.unselectedItemTintColor = MDCPalette.grey.tint400
            tabBar?.inkColor = MDCPalette.blueGrey.tint100

        }

感谢任何帮助。谢谢!

【问题讨论】:

  • @MwcsMac 不使用 UINavigationController,只是一个 MDCTabBarViewController 下有 2 个 MDCFlexibleHeaderContainerViewControllers
  • @MwcsMac 在选择下一个选项卡时也不使用任何代码
  • 通过将 viewControllers 数组中每个视图控制器的 TabBarItems 设置为其对应的 TabBarItem 来解决问题

标签: ios swift tabbarcontroller material-components


【解决方案1】:

我也有同样的问题。在执行MDCTabBarViewController的时候

-(void)setSelectedViewController:(nullable UIViewController *)selectedViewController 

被触发的地方有一行代码:

self.tabBar.selectedItem = selectedViewController.tabBarItem;

因此,如果您不将 barItem 设置为控制器,则会出现该错误,因为引用为 nil

我更新了你的代码,所以我希望这能解决你的问题(我安装的是 pod 版本 26)

class BusTabBarController: MDCTabBarViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = .white
    loadTabBar()
}

func loadTabBar() {

    let firstVC = BusStopFlexibleHeaderContainerViewController()
    firstVC.tabBarItem = UITabBarItem(title: "Recents", image: nil, tag: 0)

    let secondVC = BookmarksFlexibleHeaderContainerViewController()
    secondVC.tabBarItem =  UITabBarItem(title: "Favorites", image: nil, tag: 0)

    let thirdVC = UIViewController()
    thirdVC.tabBarItem = UITabBarItem(title: "YAY", image: nil, tag: 2)

    let viewControllersArray = [firstVC, secondVC, thirdVC]
    viewControllers = viewControllersArray

    let childVC = viewControllers.first
    selectedViewController = childVC

    tabBar?.delegate = self

    tabBar?.items = [firstVC.tabBarItem,
                     secondVC.tabBarItem ,
                     thirdVC.tabBarItem]

    tabBar?.selectedItem = tabBar?.items.first

    tabBar?.backgroundColor = MDCPalette.grey.tint900
    tabBar?.selectedItemTintColor = .white
    tabBar?.unselectedItemTintColor = MDCPalette.grey.tint400
    tabBar?.inkColor = MDCPalette.blueGrey.tint100

}
}

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多