问题描述
|
我的想法是将UIViewController子类化为后续控制器的基类,目的是向我的应用程序委托中的UINavigationController添加一个“注销”按钮。
//MyAppDelegate.m
@synthesize navigationController; //UINavigationController
//-didFinishLaunchingWithOptions...
[self.window addSubview:navigationController.view];
...
在我的MainWindow.xib中,我有一个附加的NavigationController,以DashboardViewController作为其根视图控制器的navigationController。
//BaseLogoutViewController.m
- (void)loadView {
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
initWithTitle:NSLocalizedString(@\"Logout\",@\"\")
style:UIBarButtonItemStyleBordered
target:self
action:@selector(logoutPressed)];
self.navigationItem.rightBarButtonItem = addButton;
[addButton release];
[super loadView];
}
// -(void)logoutPressed callback implemented
// viewDidLoad,didRecieveMemoryWarning,dealloc implemented
//DashboardViewController.h
@interface DashboardViewController : BaseLogoutViewController { }
DashboardViewController:UIViewController
DashboardViewController:BaseLogoutViewController
好消息是它确实显示了注销按钮,但仪表板未显示其自己的视图。
BaseLogoutViewController没有自己的Nib。
我的问题是,当我继承BaseLogoutViewController的子类时,为什么它不再显示DashboardViewController的视图呢?
解决方法
您暗示的事情,但我想确认:
您将要在导航控制器上推/弹出多个视图控制器?
您是否希望将每个视图上的注销按钮推送到导航控制器上?
也就是说,
loadView
不是您要覆盖的内容,viewDidLoad
是您要放置上述代码的位置,
\'loadView`负责(足够多地)加载它没有执行的视图,通过覆盖它,您可以防止它发生,您想在加载视图后对其进行扩充,
, 尝试在-(void)loadView方法中调用[super loadView]。