Элементы UIToolbar не отображаются - PullRequest
14 голосов
/ 30 августа 2009

У меня есть UINavigationController, который выдвигается DetailsViewController. В этом DetailsViewController я хочу использовать панель инструментов, которая поставляется с каждым UINavigationController (по крайней мере, начиная с iPhone OS3.0).

Итак, в viewDidLoad в моем DetailsViewController я создаю 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 .: приложение находится в (принудительном) ландшафтном режиме, и у навигационного контроллера есть преобразование вращения. Может ли это иметь какое-либо отношение к этому?

1 Ответ

37 голосов
/ 30 августа 2009

Сделали еще несколько копаний и отладок, и я пришел к выводу, что мой подход к попытке изменить navigationController был неверным. Вместо этого я должен был просто установить свойство toolbarItems DetailsViewController.

После этого мой код работал нормально:

- (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;
}
...