Добавление задач UIBarButtonItems к ToolBar

У меня есть UINavigationController с UITableViewController в нем. Я хочу показать ToolBar в нижней части с UIBarButtonItem. 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]; 
    }
12
задан Peter Hosey 19 March 2010 в 07:35
поделиться

5 ответов

Я обнаружил, что в документации 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];
}
14
ответ дан 2 December 2019 в 02:57
поделиться

Замените эту строку:

[[self navigationController] setToolbarItems: arr animated: YES];

следующим образом:

[self setToolbarItems: arr animated: YES];

В общем, вы должны установить toolbarItems на каждом отдельном контроллере представления, который вы нажимаете, а не на самом UINavigationController.

47
ответ дан 2 December 2019 в 02:57
поделиться

Возможно, вы можете использовать построитель интерфейсов, чтобы избежать этого, но он будет медленнее

0
ответ дан 2 December 2019 в 02:57
поделиться

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

"Объект контроллера навигации теперь управляет дополнительной панелью инструментов в своей иерархии представления. При отображении эта панель получает текущий набор элементов из свойства toolbarItems активного контроллера представления."

Пробовали ли вы подклассифицировать UITableViewController для вашего tableview и установить соответствующее свойство toolbarItems?

0
ответ дан 2 December 2019 в 02:57
поделиться

Я создал контроллер представления, который является подклассом 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];

У меня это работает с «текстовыми» кнопками, встроенными значками и пользовательскими значками.

0
ответ дан 2 December 2019 в 02:57
поделиться