如何在更改viewControllers后刷新UITabBar

时间:2015-02-22 23:04:36

标签: ios swift uitabbarcontroller uitabbar

我正在为应用实施用户身份验证系统。如果用户已登录,则会获得一组可用选项卡以供选择。如果他们没有登录,他们会得到另一个。现在我遇到的问题是,在用户登录后(app重定向到某些oauth的safari然后返回到应用程序),我更新了UITabBarController中的标签,如下所示:

private var accessibleViewControllers = [UIViewController]()

func setUpView() {
    var viewControllersToSet = [UIViewController]()

    if let user = theUser {
        for controller in accessibleViewControllers {
            if !(controller is LogInViewController) {
                viewControllersToSet.append(controller)
            }
        }
    } else {
        for controller in accessibleViewControllers {
            if controller is LogInViewController || controller is HomeNavigator  {
                viewControllersToSet.append(controller)
            }
        }
    }

    setViewControllers(viewControllersToSet, animated: false)
}

现在有趣的是,标签图标不会刷新,但我仍然可以点击新图标链接到相关视图的空间。如何刷新选项卡以显示正确的图标?

1 个答案:

答案 0 :(得分:-1)

这是一个线程问题。我正在通过后台线程加载用户数据,然后从同一个后台线程调用委托方法setUpView。为了解决这个问题,我把它放回主队列:

    dispatch_async(dispatch_get_main_queue()) {
        if self.accessibleViewControllers != nil {
            var viewControllersToSet = [UIViewController]()

            if let user = MediatedUser.shared {
                for controller in self.accessibleViewControllers! {
                    if !(controller is LogInViewController) {
                        viewControllersToSet.append(controller)
                    }
                }
            } else {
                for controller in self.accessibleViewControllers! {
                    if controller is LogInViewController || controller is HomeNavigator  {
                        viewControllersToSet.append(controller)
                    }
                }
            }

            self.viewControllers = viewControllersToSet
        }
    }