![](/img/trans.png)
[英]UINavigationController Toolbar : problem setting UIBarButtonItems
[英]Problem adding UIBarButtonItems to a ToolBar
我有一個UINavigationController,里面有一個UITableViewController。 我想在底部用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];
}
替換此行:
[[self navigationController] setToolbarItems:arr animated:YES];
有了這個:
[self setToolbarItems:arr animated:YES];
通常,您應該在您推送的每個視圖控制器上設置toolbarItems
,而不是在UINavigationController本身上設置。
我在Apple的文檔中發現了一個解釋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];
}
也許您可以使用界面構建器來避免這種情況,但速度會慢一些
“導航控制器對象現在管理其視圖層次結構中的可選工具欄。顯示時,此工具欄從活動視圖控制器的toolbarItems屬性中獲取其當前項目集。”
您是否嘗試過為您的tableview子類化UITableViewController並使用適當的toolbarItems屬性進行設置?
我創建了一個視圖控制器,它是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];
這對我來說有“文本”按鈕,內置圖標和自定義圖標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.