如何覆盖UINavigationController的构造函数以传入rootViewController?
我会在Objective-C中使用以下方法:
-(id)initWithRootViewController:(UIViewController*)rootViewController
{
UIViewController *fakeController = [[[UIViewController alloc] init] autorelease];
if (self = [super initWithRootViewController:fakeController]) {
self.fakeRootViewController = fakeController;
rootViewController.navigationItem.hidesBackButton = YES;
[self pushViewController:rootViewController animated:NO];
}
return self;
}
提前谢谢你。问候。
P.S这段代码取自Change the root view controller
修改
感谢您的回复。我对之前的代码段感兴趣,因为它特别有趣。
@Geoff Norton:也许我永远不会使用你的解决方案,但无论如何我发现它很棒......我的尝试是创建一种充当模板的UINavigationViewController。特别是,UINavigationController最初有一个loginView(它可能是一种rootviewcontroller)。然后登录时,我可以有两种类型的视图:主视图和辅助视图。前者与登录视图位于同一级别(它们可能是一种rootviewcontrollers)。后者被推到第一个之上。您可以浏览正常的UInavigationController堆栈或通过工具栏。工具栏仅加载主视图。
是否可以使用UINavigationController执行此操作?
再次感谢你。问候。
答案 0 :(得分:4)
它可能但你不应该这样做。根据Apple的说法,UINavigationController是"not designed for subclassing".如果你坚持这样做:
public YourNavController : UINavigationController {
[Export ("initWithRootViewController:")]
public YourNavController (UIViewController vc) {
UIViewController fc = new UIViewController ();
Handle = Messaging.intptr_objc_msgSend_intptr (this.Handle, Selector.GetHandle ("initWithRootViewController:"), fc.Handle);
FakeRootViewController = fc;
vc.NavigationItem.HidesBackButton = true;
PushViewController (vc, false);
}
}
接近这一点应该有用。
答案 1 :(得分:2)
像Geoff Norton所指出的那样,你不应该继承UINavigationController。
我一直坚持这样做几次,只是为了发现每隔一段时间就会出现一些没有逻辑解释的错误。当你谷歌那些,答案总是“你应该没有子类UINavigationController”。