iOS视图切换问题:例如退出之后的视图跳转动作,怎样优雅一些?

这是 tabBar "我的"模块 里面 的子界面“设置”里面的点击“退出登录”的 响应代码:

-(void)toLogOut{
    [self.navigationController popViewControllerAnimated: NO ];  // 跳转代码
    [[MainAccountModel shareMainAccountModel ] exitLogin ];// 业务代码
    [self.mainTabBarCtrl chooseButtonCurrentSelected: 0 ]; // 跳转代码
}

好简单,很粗糙。
先pop 到 一级界面,再选择到首页(tabBarController 的 第一个视图控制器)。
我觉得不好, 这样跳起来 简直是有些 惊吓。

我看市面上的App, 如QQ, 钉钉,
点击退出, 先弹出登录界面,我再登录,登录成功 ,进入 首页(tabBarController 的 第一个视图控制器)。

怎么实现呢?
感觉 上面那个 视图切换动作,暗中实现了(很平和地实现了。)
怎么才能做到呢?

阅读 3.8k
3 个回答
- (void)toLogOut {
    // 业务代码
    [[MainAccountModel shareMainAccountModel ] exitLoginWithSuccessHandler:^{
        // 如果首页控制器push了其他控制器, 先popToRoot
        // [(UINavigationController *)self.mainTabBarCtrl.viewControllers.firstObject popToRootViewControllerAnimated:NO];

        // 跳转首页导航控制器
        [self.mainTabBarCtrl chooseButtonCurrentSelected:0]; // 跳转代码
    }];
    [self.navigationController popToRootViewControllerAnimated:NO];  // 跳转代码
}

// MainAccountModel.m
- (void)exitLoginWithSuccessHandler:(SuccessBlock)handler {
    // do login
    // ...
    // 异步请求登录, 登陆成功回调, 小心循环引用
    handler();
}
-(void)toLogOut{
    [self.navigationController popViewControllerAnimated: NO ];  // 跳转代码
    [[MainAccountModel shareMainAccountModel ] exitLogin ];// 业务代码
    [self.mainTabBarCtrl chooseButtonCurrentSelected: 0 ]; // 跳转代码
    [self.mainTabBarCtrl presentViewController:[LoginViewController new] animated:NO completion:^{
        
    }];
}

我在APP开发之初,把 login模块单独拿出来,不使用 navtiongationController 控制,这样避免了 Pop 和 Push 多个 VC 导致的动画影响。 FYI

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题