如何覆盖initWithRootViewController

时间:2011-05-17 10:39:39

标签: cocoa-touch

如何在UINavigationController中覆盖initWithRootViewController方法?

xcode为我生成的唯一方法,其中包括loadFromNibName和loadView等方法。这些方法不会被调用,我需要在启动时向导航控制器添加NSNotification。

我知道它看起来有点像以下但我不知道该方法的主体是什么

- (id)initWithRootViewController:(UIViewController *)rootViewController

{
 // what goes here?
}

修改 我想这个问题确实是“如何在初始化期间自定义UIViewCOntroller”

修改2

我的导航控制器标题

@interface AccountViewNavigationController : UINavigationController {

}
@end

实例化我的UINavigationController就像这样会导致没有启动方法达到断点

accountViewNavController = [[UINavigationController alloc] initWithRootViewController:accountView];

就像我实例化那样,loadView确实被调用....但它被多次调用

accountViewNavController = [[UINavigationController alloc] init];

[accountViewNavController initWithRootViewController:accountView NO];

我对这个阶段非常困惑。

1 个答案:

答案 0 :(得分:2)

使用与覆盖任何其他init方法相同的基本结构:

- (id)initWithRootViewController:(UIViewController *)rootViewController
{
    if ((self = [super initWithRootViewController:rootViewController])) {
        // Your modifications go here
    }
    return self;
}

请注意,Apple声称UINavigationController“不打算用于子类化”,但它们并不绝对禁止它。我想这意味着“不要试图通过搞乱内部消息流来改变类的工作方式”。