Cocoa touch 如何使用RootViewController覆盖init

Cocoa touch 如何使用RootViewController覆盖init,cocoa-touch,Cocoa Touch,如何在UINavigationController中覆盖initWithRootViewController方法 xcode为我生成的唯一方法是loadFromNibName和loadView。这些方法不会被调用,我需要在启动时向navigationcontroller添加NSNotification 我知道它看起来有点像下面的内容,但我不知道这个方法的主体是什么 - (id)initWithRootViewController:(UIViewController *)rootViewContr

如何在UINavigationController中覆盖initWithRootViewController方法

xcode为我生成的唯一方法是loadFromNibName和loadView。这些方法不会被调用,我需要在启动时向navigationcontroller添加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];

这个阶段让我非常困惑。

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

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

请注意,苹果声称UINavigationController“并非用于子类化”,但他们并没有绝对禁止它。我猜这意味着“不要试图通过干扰内部消息流来改变类的工作方式”。

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

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

请注意,苹果声称UINavigationController“并非用于子类化”,但他们并没有绝对禁止它。我猜这意味着“不要试图通过干扰内部消息流来改变类的工作方式”。

hmmm。。。我在那里插入了一个断点,但它似乎仍然没有进入函数?@typeat:你确定你使用的是自己的子类而不是股票UINavigationController吗?您是否使用IB来创建它,在这种情况下,您需要使用
awakeFromNib
或可能使用
initWithCoder:
?或者您可以在
viewdiload
视图将显示:
,或类似的内容中执行代码吗?我不确定它是否为“库存”。我没有使用IB。在代码中这样做,只有在我这样实例化的情况下才会调用viewDidLoad。accountViewNavController=[[UINavigationController alloc]init];。viewDidload也被多次调用,这对我来说很奇怪?@typelat:看看你在
accountViewNavController=[[UINavigationController alloc]init]
中做了什么。您正在分配stock UINavigationController的实例,而不是您的子类。因此,当然不会调用您的子类版本<如果内存压力导致不可见的视图控制器释放其视图,则可以多次调用代码>viewDidLoad(每个调用之间都有一个
viewDidUnload
)。。。我在那里插入了一个断点,但它似乎仍然没有进入函数?@typeat:你确定你使用的是自己的子类而不是股票UINavigationController吗?您是否使用IB来创建它,在这种情况下,您需要使用
awakeFromNib
或可能使用
initWithCoder:
?或者您可以在
viewdiload
视图将显示:
,或类似的内容中执行代码吗?我不确定它是否为“库存”。我没有使用IB。在代码中这样做,只有在我这样实例化的情况下才会调用viewDidLoad。accountViewNavController=[[UINavigationController alloc]init];。viewDidload也被多次调用,这对我来说很奇怪?@typelat:看看你在
accountViewNavController=[[UINavigationController alloc]init]
中做了什么。您正在分配stock UINavigationController的实例,而不是您的子类。因此,当然不会调用您的子类版本<如果内存压力导致不可见的视图控制器释放其视图,则可以多次调用code>viewDidLoad(每次调用之间都有一个
viewDidUnload
)。为什么要覆盖它?如果您使用的是xib,只需将RootViewController类更改为另一个UIViewController子类即可,我希望添加以下内容。。[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(receiveMyEvent:)名称:@“MyEvent”对象:nil];为什么要覆盖它?如果您使用的是xib,只需将RootViewController类更改为另一个UIViewController子类即可,我希望添加以下内容。。[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(receiveMyEvent:)名称:@“MyEvent”对象:nil];