【发布时间】:2016-06-21 07:18:01
【问题描述】:
我的应用程序在用户未登录时不必显示任何选项卡。我在使用此功能时遇到了很多问题。首先,我在登录屏幕之后将视图嵌入到选项卡栏控制器中,一切都显示正常,除非我实现了登录功能。由于这是一个异步调用,我不得不等到凭据得到验证。我无法在shouldPerformSegue 方法或苹果提供的任何其他方法中执行此操作,因为在异步内容完成之前您无法阻塞主线程,因此必须在 IbAction 中以编程方式完成转场:
@IBAction func doLogin(sender: AnyObject) {
userIsLogged = false
let apiCall = webApi()
apiCall.callCheckIsUserLogged(nil, password : self.passwordField.text, email: self.mailField.text){ (ok) in
if ok {
if(userIsLogged == true){
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("loginUser", sender: self)
}
}else {
NSOperationQueue.mainQueue().addOperationWithBlock{
print("User not logged in")
self.alert.message = "Please enter valid credentials"
self.displayAlert()
}
}
}
}
}
但这让我想到了另一个问题:在程序化 segue 之后,我的标签栏控制器消失了,经过一段时间的阅读,似乎避免这种情况的唯一方法是将标签栏控制器嵌入到导航控制器中。所以我做到了,但现在,我遇到了许多新问题。首先,我有两个导航控制器,一个位于项目的最开始,另一个是我嵌入到标签栏控制器的新控制器。一张图比我的话更能说明这一点:
现在我有两个导航控制器,我不知道如何隐藏最上面的那个。已经试过了:
self.navigationController?.navigationItem.hidesBackButton = true
但是隐藏了箭头,我需要隐藏另一个导航控制器。但是最好的事情确实是看到这种情况下的最佳方法,当您想在项目中间添加一个嵌入到导航控制器中的 tabBar 控制器时。 谢谢大家
【问题讨论】:
标签: ios swift uinavigationcontroller swift2 uitabbarcontroller