3

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

该 SDK 的主要用途是呈现一个 UI,使用户能够完成某个过程。

这个 UI 应该包装在 UINavigationController 中,因为它由构成流程的多个 UIViewController 组成。

我希望将使用我的 SDK 的开发人员初始化我的自定义 UINavigationController,然后以他们想要的方式呈现它。

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

实现这一目标的推荐方法是什么?

4

3 回答 3

2

您不应该UINavigationController按照 Apple 文档中的说明进行子类化。

此类不用于子类化。相反,在您希望应用程序的用户界面反映内容的分层性质的情况下,您可以按原样使用它的实例。

如果您是 iOS 5,请使用新的容器 API for UIViewControllers。

实现一个容器视图控制器

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

如果 iOS 5 不可用,请参阅我之前的回答Handle different view controllers within an application: 创建自定义内容视图控制器

希望有帮助。

于 2012-06-28T07:30:58.923 回答
1

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

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

开发人员将使用此方法来初始化您的视图控制器,并且所有初始化工作都对他们隐藏。

于 2012-06-28T11:32:52.950 回答
0

如果 rootViewController 是不同的类,则初始化可能会失败

- (id)initWithRootViewController:(UIViewController*)rootController
{
    if(![rootController isKindOfClass:[YourRootViewController class]])
        return nil;

    //Do default init stuff

}
于 2012-06-28T07:23:46.713 回答