【问题标题】:Replace UIViewController in UITabBarController替换 UITabBarController 中的 UIViewController
【发布时间】:2016-03-24 12:11:15
【问题描述】:

情况: 我有一个带有 TabBarController 的应用程序。

其中一个选项卡需要正确登录 Web 服务才能正常运行。 选择 Tab 后,我检查是否登录成功,如果没有,我想在该选项卡内显示一个登录界面。

到目前为止,通过使用 segue,我设法显示了一个带有登录界面的模态 UIViewController,但它隐藏了 Tab Bar,禁止用户使用应用程序的其余部分。

我可以通过只显示一个 UIAlertView 来解决这个问题,但我真的不喜欢这个选项。

那么,给定一个 myTabRegularViewController 和一个 myTabLoginViewController,这里最好的方法是什么。而且,第一个要加载的 ViewController 是否重要?

编辑:

我的首选逻辑如下。在 myTabRegularViewController 我有这个代码:

- (void)viewDidLoad{

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    if ([userDefaults objectForKey:@"loginSuccess"]){
       .....


    } else {
        NSLog(@"Not Logged In");
        //load myTabLoginViewController

    }
}

【问题讨论】:

  • 不能调整登录视图控制器的大小吗?
  • 这有助于显示标签吗?

标签: ios uiviewcontroller uitabbarcontroller


【解决方案1】:

创建一个实现UITabBarControllerDelegate协议的对象并实现tabBarController:shouldSelectViewController:方法。

显然你会想要一个与我不同的测试,但这里有一个快速示例来展示这个想法。 (我创建了两个选项卡,一个带有基本视图控制器,一个带有导航控制器。)

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {

    if ([viewController isKindOfClass:[UINavigationController class]]) {
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *login = [storyboard instantiateViewControllerWithIdentifier:@"login_controller"];
        [(UINavigationController *)viewController pushViewController:login animated:NO];
    }
    return YES;
}

【讨论】:

  • 不确定这是如何工作的。 tabBarController:shouldSelectViewController: 应该何时/如何被触发?
  • 如果您将实现它的对象设置为标签栏控制器的代理,则当有人尝试选择标签时会触发它。
【解决方案2】:

就我而言,使用 segues 的解决方案是最简单的。为了不隐藏 TabBar,我不得不将 myTabRegularViewController 嵌入到 NavigationController 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多