在自定义UINavigationController中强制执行特定rootViewController的推荐方法是什么?

时间:2012-06-28 07:20:10

标签: iphone objective-c ios cocoa-touch uinavigationcontroller

我正在构建一个将由其他iPhone开发人员使用的iPhone SDK。

此SDK的主要用途是提供一个用户界面,使用户能够完成某个过程。

此UI应包含在UINavigationController中,因为它由构成该进程的多个UIViewController组成。

我希望使用我的SDK的开发人员将初始化我的自定义UINavigationController,然后根据需要显示它。

我想强制我的自定义导航控制器的rootViewController将是SDK中的特定ViewController,开发人员将无法使用不同的rootViewController初始化它。

实现此目的的推荐方法是什么?

3 个答案:

答案 0 :(得分:2)

您不应该像Apple doc。中所写的那样继承UINavigationController

  

此类不适用于子类。相反,您使用实例   在你想要你的应用程序的用户的情况下   界面,以反映您的内容的层次性。

如果是iOS 5,请使用UIViewController s。

的新收容API

Implementing a Container View Controller

使用这种方法,您可以强制执行根控制器并将其隐藏给用户。

如果iOS 5不可用,请参阅我之前的答案Handle different view controllers within an application: creating Custom Content View Controllers

希望有所帮助。

答案 1 :(得分:1)

您可以编写一个类方法来实例化视图控制器:

+(MyViewController*)myViewController {
    MyViewController* = myViewController = [[MyViewController* alloc] init];
    myViewController.rootViewController = [[MyDesiredRootViewController alloc] init];
    return myViewController;
}

开发人员不如使用此方法来初始化视图控制器,并且将隐藏所有初始化工作。

答案 2 :(得分:0)

如果rootViewController是另一个类

,你可能会失败初始化
- (id)initWithRootViewController:(UIViewController*)rootController
{
    if(![rootController isKindOfClass:[YourRootViewController class]])
        return nil;

    //Do default init stuff

}