我有一个带UITableViewController的UINavigationController。我想在底部用UIBarButtonItem显示一个ToolBar。 ToolBar正在显示,但按钮不会出现。谁知道为什么?
- (void)viewDidLoad {
[super viewDidLoad];
[[self navigationItem] setTitle:@"Selections List"];
[[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addProjectSearch:)] autorelease]];
[[self navigationItem] setLeftBarButtonItem:[self editButtonItem]];
[[super tableView] setDataSource: self];
[[super tableView] setDelegate: self];
//Toolbar
UIBarButtonItem * logoutButton = [[[UIBarButtonItem alloc] initWithTitle:@"Log out" style:UIBarButtonItemStylePlain target:self action:@selector(logOut:)]autorelease];
NSMutableArray * arr = [NSMutableArray arrayWithObjects:logoutButton, nil];
[[self navigationController] setToolbarHidden: NO animated:YES];
[[self navigationController] setToolbarItems:arr animated:YES];
}
答案 0 :(得分:45)
替换此行:
[[self navigationController] setToolbarItems:arr animated:YES];
用这个:
[self setToolbarItems:arr animated:YES];
通常,您应该在您推送的每个视图控制器上设置toolbarItems
,而不是在UINavigationController本身上设置。{/ p>
答案 1 :(得分:14)
我在Apple的documentation中发现了一个解释UIToolBar的小段落。在这一段中有一个非常小的句子陈述:“[..]显示时,此工具栏从活动视图控制器[..]的toolbarItems属性获取其当前项目集”但他们不首先解释该视图必须激活才能获得这些按钮。这意味着UIToolBar已准备好在viewDidAppear上检索它的按钮,而不是在viewDidLoad消息上。
- (void)viewDidAppear:(BOOL)animated {
[[self tableView] reloadData];
[[self navigationController] setToolbarHidden: NO animated:YES];
UIBarButtonItem * logoutButton = [[[UIBarButtonItem alloc] initWithTitle:@"Log out" style:UIBarButtonItemStylePlain target:self action:@selector(logOut:)]autorelease];
NSMutableArray * arr = [NSMutableArray arrayWithObjects:logoutButton, nil];
[self setToolbarItems:arr animated:YES];
[super viewDidAppear:animated];
}
答案 2 :(得分:0)
也许您可以使用界面构建器来避免这种情况,但是它会慢一些
答案 3 :(得分:0)
“导航控制器对象现在管理其视图层次结构中的可选工具栏。显示时,此工具栏从活动视图控制器的toolbarItems属性中获取其当前项目集。”
您是否尝试过为您的tableview子类化UITableViewController并使用相应的toolbarItems属性进行设置?
答案 4 :(得分:0)
我创建了一个视图控制器,它是UITableViewController的子类,我通过执行以下操作使工具栏正常工作:
在viewDidLoad中:
self.navigationController.toolbar.barStyle = UIBarStyleBlackTranslucent;
NSArray* toolbarItems = [NSArray arrayWithObjects: button1,
button2,
button3,
nil];
[self setToolbarItems:toolbarItems animated:NO];
然后,因为我只想在这个屏幕上使用工具栏,所以我将其添加到viewWillAppear:
[self.navigationController setToolbarHidden:NO animated:YES];
最后,我再次在viewWillDisappear中隐藏工具栏:
[self.navigationController setToolbarHidden:YES animated:YES];
这适用于“文本”按钮,内置图标和自定义图标。