【问题标题】:Difference between Inheriting the UINavigationController class and assigning the rootViewController继承 UINavigationController 类和分配 rootViewController 的区别
【发布时间】:2013-03-11 07:19:03
【问题描述】:

继承UINavigationController类和分配rootViewController属性(或使用initWithRootViewController:方法)有什么区别??

我对此有点困惑。考虑下面 UINavigationController 的代码继承:

@interface NativeViewController : UINavigationController
{

}

现在考虑下面的代码使用 initWithRootViewController: 方法:

UINavigationController *viewController = nil;
if (self) {
    NativeViewController *vc = [[NativeViewController alloc] initWithNibName:@"NativeViewController" bundle:nil];
    viewController = [[UINavigationController alloc] initWithRootViewController:vc];
    [vc autorelease];
}
return viewController;

什么时候像第一种情况一样使用继承,什么时候使用initWithRootViewController:方法??

如果继承,rootViewController 属性会怎样?

UITabbarController 班级也有同样的问题。

【问题讨论】:

    标签: iphone ios objective-c uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    第一个用于自定义UINavigationController。 另一方面,第二个是初始化UINavigationController,其中包含第一个视图控制器。 假设UINavigationController 本身只是导航UIViewControllers 的占位符。

    你仍然应该把rootViewController放在UINavigationController继承的情况下。

    【讨论】:

    • 不放rootViewController会怎样??? rootViewController 的确切用途是什么?
    • 正如我所说,UINavigationController 只是占位符。因此,当您不设置 rootViewController 时,您将看不到其中的任何内容。它有 rootViewController,所以你可以在需要的时候回到 rootViewController。
    • 如果我在 UINavigationController View 上放置一个标签并将其他 ViewController 推送到 NavigationController 中,那么我将在那个新的 ViewController 中看到标签。原因是我将 UILabel 放在 NavigationController 的视图中,而不是 rootViewController 的视图中。所以我的问题是在哪种 EXPLICIT 情况下我需要子类化 UINavigationController??
    • 比方说,您需要几个 UINavigationControllers,并且它们都具有相同的 UI/功能。您应该在这里和那里放置相同的代码,这显然不适合编码和管理它们。此外,您在未来的项目中可能需要同样的东西。在这种情况下,您可以执行 INHERIT UINavigationController。
    【解决方案2】:

    仅在您需要控制 UIAppearance 或委托方法未提供的容器功能或外观的情况下对容器(UINavigationController、UITabBarController)进行子类化。

    在所有其他情况下(大多数情况下),您需要设置根视图控制器或 viewControllers 属性。您不需要子类来提供基本功能。这些是容器 - 你的大部分 UI 都来自子视图控制器。

    【讨论】:

    • 因此,当我们不继承时,我们可以自定义 Navigation Controller 或 TabBarController 的所有属性...例如通过访问 self.navigationController 属性来自定义 NavigationBar。目前,我看不到对这两个类进行子类化的明确使用。您能否提供我必须需要子类化的用例?这背后的原因是,我的项目中存在子类化不起作用的问题,如果我设置 rootViewController 则它可以工作......所以我需要适当的理由何时需要子类化 navigationController。
    • 好吧,您几乎不需要这样做。也许如果您想在视图控制器被推送或弹出时更改动画,或者类似的事情。设置根视图控制器与子类无关——即使是子类也需要根视图控制器,或者设置 viewControllers 数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2011-11-28
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多