【问题标题】:Question about UITabBar Controller关于 UITabBar 控制器的问题
【发布时间】:2011-02-14 15:48:40
【问题描述】:

您好,我对 iPhone sdk 完全陌生。 我正在尝试构建一个显示欢迎屏幕 3 秒的应用程序,然后它切换到具有标签栏视图的主应用程序屏幕。 我的欢迎屏幕在单独测试时工作正常。但是在 main.xib 中配置 UITabBarController 后,欢迎屏幕没有显示。虽然 Tab Bar 可以正常工作。

我命名为 rootController 的欢迎屏幕控制器。 在 AppDeligate 我有以下代码 -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    //  Override point for customization after application launch.    

    RootController* rootController = [[RootController alloc] init];
    //  [self.window insertSubview:rootController.view atIndex:4];
    [self.window addSubview:rootController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

显示欢迎屏幕后,我将删除它的视图,并希望显示由标签栏组成的主视图。可能的错误是什么?

【问题讨论】:

  • sry 它的 MainWindow.xib 不是 main.xib

标签: iphone cocoa-touch uitabbarcontroller


【解决方案1】:

我猜标签栏控制器的视图是在 applicationDidFinishLaunching... 方法返回后加载的,所以它会在你添加 RootController 的视图之后添加到你的应用程序窗口中,它现在位于标签栏视图的下方。

可能有多种方法可以实现您想要的,但我会在标签栏控制器的 viewDidLoad 方法中以模态方式呈现欢迎视图。虽然您需要为此子类化标签栏视图控制器类,但代码将是最容易理解的。

子类 UITabBarController,在 nib 文件中使用它,并覆盖 viewDidLoad 并执行类似的操作

[超级viewDidLoad]; //创建一个RootController对象 [self presentModalViewController:welcomeViewController Animation:NO];

您可以在需要时关闭模态视图。

【讨论】:

  • Apple 不鼓励继承 UITabBarController。问题是加载了 RootController 笔尖,然后加载了主笔尖,但我使用了在 RootController 中运行 3 秒后运行的计时器。在此计时器运行之前,主 nib 已加载,根控制器 nib 位于幕后。还在思考如何以一种简洁的方式解决它。
  • Apple 的意思是不要尝试修改 UITabBarController 的行为。我没有看到子类化 UITabBarController 只是为了在加载时添加模式视图的问题,而我看到使用计时器来延迟笔尖加载有很多问题。 RootController nib 在 loadView 方法中被调用,因为主 nib 请求显示根控制器视图,并且预期在调用 viewDidLoad 时,所有 nib 对象都已正确加载。永远不要像那样延迟笔尖的加载。
  • 好吧,如果你真的讨厌继承 UITabBarController,你可能有另一个视图控制器,它的视图始终存在,将标签栏控制器视图作为子视图,在它的 viewDidLoad 中你可以显示欢迎屏幕模态的。但根本没有意义。我肯定会继承 UITabBarController。
【解决方案2】:

最简单的方法:将欢迎视图控制器和标签栏控制器都添加到您的 mainwindow.xib 中,为它们创建 outlet 并将它们链接起来。

然后将它们都显示出来:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    [window addSubview:tabBarController.view];
    [window addSubview:welcomeViewController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

在您的welcomeViewController 中,您可以在3 秒后将其视图设置为隐藏,将其从窗口中移除,等等。

【讨论】:

    【解决方案3】:

    我非常巧妙地解决了这个问题。我使用presentModalViewController:animated: 并在timerDidRan: 方法中解散。虽然我将UIViewController 子类化而不是UITabBarcontroller,但我觉得更正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多