在我的AppDelegate中,我动态创建了一个UITabBarController和UINavigationController。然后我添加了3个视图。
// Prepare the tab bar controller
tabBarController = [[UITabBarController alloc] init];
// Switch controller
UserSettingsController *settingsController = [[UserSettingsController alloc] init];
// Switches controller
SwitchesController *switchesController = [[SwitchesController alloc] init];
// Help controller
HelpController *helpController = [[HelpController alloc] init];
NSArray *controllers = [NSArray arrayWithObjects: switchesController, settingsController, helpController, nil];
tabBarController.viewControllers = controllers;
if (self.navigationController == nil) {
self.navigationController = [[UINavigationController alloc] initWithRootViewController:tabBarController];
}
[window addSubview:navigationController.view];
当我最初这样做时,我注意到我现在在页面顶部有一个标题/标题栏。它是空白的,真的只占用空间。我想利用它,并在我的一个视图中添加一个“刷新”按钮。
在我感兴趣的视图中,我尝试了以下内容:
-(void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithTitle:@"Refresh" style:UIBarButtonItemStylePlain target:self action:@selector(refreshSwitches:)];
self.navigationItem.rightBarButtonItem = refresh;
[refresh release];
}
-(void)refresh{
...
}
没有按钮出现,所以我要么离开了,要么我错过了什么。
有什么建议吗?
由于
答案 0 :(得分:0)
我认为问题在于您添加到标签栏控制器的视图控制器未被导航控制器封装。虽然您的UITabBarController有一个导航控制器,但这并没有隐含地给它的所有选项卡导航控制器(并且没有导航控制器,视图控制器的navigationItem
将不会做任何事情。)为了解决这个问题,我建议封装初始化时带有导航控制器的视图控制器:
例如:
UserSettingsController *settingsController = [[UserSettingsController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:settingsController];
[settingsController release];
// etc...
NSArray *controllers = [NSArray arrayWithObjects:navController, ..., ..., nil];
tabBarController.viewControllers = controllers;
// Release your nav controllers, other cleanup
修改强>
好的,我想我现在对你的设置有了更好的了解。我能够得到以下工作:
self.tabBarController.navigationItem.rightBarButtonItem = myButton;
一个重要的警告是,除非您明确删除按钮,否则该按钮将保留在您的所有tabbarcontroller视图中。这可能会使维护变得烦人/不优,但如果您希望按钮的视图与导航控制器本身没有直接关联,我不确定另一种解决方案。