这不是正确的方法,init
很少调用已经初始化的对象(我认为永远不会)。
我解决这个问题的方法是创建 UINavigationController 的子类。
在这个子类中,我覆盖initwithrootviewcontroller:
- (id) initWithRootViewController:(UIViewController *)rootViewController
{
UIViewController *fakeController = [[[UIViewController alloc] init] autorelease];
self = [super initWithRootViewController:fakeController];
if(self)
{
self.fakeRootViewController = fakeController;
rootViewController.navigationItem.hidesBackButton = YES;
[self pushViewController:rootViewController animated:NO];
}
return self;
}
fakeRootViewController 实际上什么都不做,这是 iOS 无法设置 rootviewcontroller 的一种解决方法。
在另一个函数(setRootViewController:aViewController)中,您隐藏了新的“rootviewcontroller”的后退按钮,因此用户永远不会看到有一个假的 rootviewcontroller。然后把它推到 fakerootviewcontroller 上面
poptorootviewcontroller 应该被覆盖以确保它总是弹出到堆栈的索引 1,而不是索引 0。
viewcontroller 的 getter 应该改变,所以它返回一个没有 fakerootviewcontroller ( removeobjectatindex: 0
)的数组
希望这可以帮助!