项目中有tabbarcontroller维护4个navigationcontroller,然后在个人中心界面实现用户注册或者登录成功后跳转到首页的需求(和新浪微博一样)
这里由于登录界面是present出来的,及时present的时候用了navigationcontroller来进行跳转,但是在present以后的任何控制器里是拿不到tabbarcontroller的(可以测试tabbarcontroller为nil),因此想实现需求的话有2种方法:
法1:
在需要跳转到首页的地方发送通知,然后在个人中心页面添加通知,进行跳转;
法2:
在present的时候再次将tabbarcontroller添加到navigationcontroller的跟控制器,用tabbarcontroller来进行present,这样在想跳转到首页的地方就可以取到tabbarcontroller.index了。
总之,两种方法试了下来,发现法二是最佳的实践方案;原因不仅仅是因为代码精简紧凑,还有这种思想非常好。
下面上代码:
在需要跳转到首页的地方添加代码:
//跳转到首页
let resultVC = UIApplication.sharedApplication().keyWindow?.rootViewController as? MainViewController
resultVC?.selectedIndex = 0
dismissViewControllerAnimated(true, completion: nil)
然后在全局跳转的代码之处修改为下方这样:
///全局跳转至登录界面
func global_PresentLoginVC() {
/*
//法一:用户未登录,跳转到登录页面
let loginVC = LoginViewController()
let nav = DSNavigationController(rootViewController: loginVC)
global_GetTopViewController()?.presentViewController(nav, animated: true, completion: nil)
*/
//法二:将tabbarcontroller设置为登录注册等的跟控制器,方便跳转tabbarcontroller.selectenIndex
let resultVC = UIApplication.sharedApplication().keyWindow?.rootViewController as? MainViewController
let loginVC = LoginViewController()
let nav = DSNavigationController(rootViewController: loginVC)
resultVC?.presentViewController(nav, animated: true, completion: nil)
}
网友评论