我有一个UINavigationController被推送到DetailsViewController。在这个DetailsViewController中,我想使用每个UINavigationController附带的工具栏(至少从iPhone OS3.0开始)。
因此,在我的DetailsViewController中的viewDidLoad中,我创建了一个UIBarButtonItem,我将它添加到一个数组并将其交给导航控制器:
- (void) viewDidLoad {
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)];
NSArray *items = [NSArray arrayWithObject: item];
TestUIAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
UINavigationController *navController = delegate.navigationController;
[navController setToolbarItems: items animated:NO];
[navController setToolbarHidden: NO animated: YES];
}
但是,出于某种原因,当UIToolbar动画到屏幕上时,该项目不会添加到工具栏中。
是否需要使用UIToolbar进行某种特定的订单才能实现此功能?
P.S。:应用程序处于(强制)横向模式,navigationController.view对其进行了旋转变换。这与它有什么关系吗?
答案 0 :(得分:37)
已经做了一些挖掘和调试,我得出结论,我尝试修改navigationController
的方法是错误的。相反,我应该只设置DetailsViewController的toolbarItems属性。
之后,我的代码运行良好:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)];
NSArray *myToolbarItems = [[NSArray alloc] initWithObjects: item, nil];
[self setToolbarItems: myToolbarItems];
[myToolbarItems release];
}
return self;
}