iOS 切换tabbar跳转至登录界面

在实际开发中,app一般有4或者5个tabBarItem,当切换至和用户信息相关的界面时,需要先登录才能看到相关内容。以某宝为例,在未登录的情况下,切换至后面三个item的时候,就会先弹出登录界面,只有登录之后才能看消息、购物车及个人信息。

类似上面需求,在 UITabBarControllerDelegate 的下面代理方法中便可以轻松实现:

    //MARK: - UITabBarControllerDelegate

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        //判断当前选中vc的标题
        if viewController.title == "购物车" {
            //判断是否登录
            if !isLogin {
                let vc = TTLoginVC()
                
                //登录成功的回调
                vc.loginBlock = {[weak self] in
                    self?.selectedIndex = viewController.tabBarItem.tag
                }
                
                vc.hidesBottomBarWhenPushed = true
                if let nc = tabBarController.selectedViewController as? TTBaseNC {
                    nc.pushViewController(vc, animated: true)
                }
                return false
            }
        }
        return true
    }

上面代理方法是切换至目标item之前调用,若返回ture则直接切换至目标item;若返回false则不会切换至item。
所以大致思路是,在切换至需要登录的item之前,先判断当前控制器的标题(也可以判断vc.tabBarItem.tag),接着判断用户是否登录,如果没有登录,则push或者present到登录界面。这里我定义了一个block回调,当用户登录成功之后,通过这个回调设置被选中模块的索引=当前控制器tabBarItem对应的tag值,这样登录完成便会显示目标模块。

你可能感兴趣的:(iOS 切换tabbar跳转至登录界面)