【发布时间】:2015-01-27 16:45:21
【问题描述】:
我有一个标签栏,其中包含一个指向导航控制器的项目,其中包含用户朋友的列表。但是,虽然匿名用户应该能够浏览应用程序,但我只希望登录用户能够查看好友列表,因为只有这样他们才有朋友。我使用 Parse 作为后端,所以我可以测试 PFUser.currentUser(),但我不知道如何告诉导航控制器连接到提示用户登录/注册的 VC(如果他们还没有的话)。提前致谢。
编辑:我已经在标签栏控制器类中实现了建议的解决方案,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
tabBarController?.delegate = self
}
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
if viewController == FriendsTableViewController() {
if PFUser.currentUser() != nil {
println("there is a logged in user")
return true
} else {
let authVC:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("auth") as UIViewController
presentViewController(authVC, animated: true, completion: nil)
println("attempted to present auth vc")
return false
}
} else {
println("not friends table vc")
return true
}
}
但是,当我选择朋友栏项目时,没有任何输出。我错过了什么?
编辑:已解决。这是朋友 vc 的视图控制器中 viewWillAppear 的代码:
override func viewWillAppear(animated: Bool) {
if PFUser.currentUser() == nil {
var login = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("auth") as AuthenticationVC
self.presentViewController(login, animated: animated, completion: nil)
}
}
【问题讨论】:
-
您是否将
tabBarController.delegate设置为self?另外,我会在您的 not friends table vcelse语句中返回true,因为您仍然希望能够切换到其他视图,除非您有其他原因返回false。 -
问题依旧。
-
委托应该设置在方法调用之外。如果您使用故事板,您可以将连接检查器中的
delegate属性拖到您的视图控制器。如果你是通过代码来做的,你可以在你的viewDidLoad方法中设置委托 -
仍然没有输出。究竟什么时候调用 tabBarController?
标签: ios swift uiviewcontroller parse-platform uistoryboardsegue