簡體   English   中英

將UIBarButtonItems添加到ToolBar時出現問題

[英]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];
}

也許您可以使用界面構建器來避免這種情況,但速度會慢一些

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html

“導航控制器對象現在管理其視圖層次結構中的可選工具欄。顯示時,此工具欄從活動視圖控制器的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM