更改 viewControllers 后如何刷新 UITabBar
How to refresh UITabBar after changing viewControllers
我正在为应用程序实施用户身份验证系统。如果用户登录,他们将获得一组可用的选项卡 select。如果他们没有登录,他们会得到另一个。现在我 运行 遇到的问题是,在用户登录后(应用程序重定向到 safari 到一些 oauth 内容,然后 returns 到应用程序),我从 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)
}
现在有趣的是,选项卡图标没有刷新,但我仍然可以单击新图标所在的空间 link 到相关视图。如何刷新选项卡以便显示正确的图标?
这是一个线程问题。我通过后台线程加载用户数据,然后从同一个后台线程调用委托方法 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
}
}
我正在为应用程序实施用户身份验证系统。如果用户登录,他们将获得一组可用的选项卡 select。如果他们没有登录,他们会得到另一个。现在我 运行 遇到的问题是,在用户登录后(应用程序重定向到 safari 到一些 oauth 内容,然后 returns 到应用程序),我从 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)
}
现在有趣的是,选项卡图标没有刷新,但我仍然可以单击新图标所在的空间 link 到相关视图。如何刷新选项卡以便显示正确的图标?
这是一个线程问题。我通过后台线程加载用户数据,然后从同一个后台线程调用委托方法 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
}
}