2009-08-30 2 views
14

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

Так, в 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 .: приложение находится в (принудительном) ландшафтном режиме, а navigationController.view имеет на нем поворотное преобразование. Может ли это иметь к этому какое-нибудь отношение?

ответ

37

Проделали еще несколько копаний и отладки, и я пришел к выводу, что мой подход к попытке изменить 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; 
} 
+1

Короткий комментарий - что распределение UIBarButtonItem выглядит он получит просочилась. Вероятно, вы должны установить его авторекламу. –

+1

О, право. Но NSArray сохраняет его, поэтому я могу просто освободить _item_ после добавления его в массив вместо этого, правильно? – NSSec

+0

Я сделал -1 на этом, потому что вы позволили вам отобразить его для этого одного диспетчера представлений, он не следит за всеми последующими контроллерами представлений через всю жизнь навигации ... это то, что большинство панелей инструментов не делают. – Jann

 Смежные вопросы

  • Нет связанных вопросов^_^