Что делать, если UIBarButtonItem не видны в UINavigationBar? - PullRequest
0 голосов
/ 04 февраля 2011

Привет всем Я пишу простой код в ViewDidLoad, и класс является дочерним для UITableViewController, как показано ниже, но кнопки не видны, а заголовок видим,

Другое дело, что я нажимаю кнопку, которая в методе ViewDidLoad ViewController.m, и которая вызывает метод, код этого метода, как показано ниже

//Code of button target method

-(void)statusMethod {
    NSLog(@"statusMethod");
    Status *ob=[[Status alloc]init];
    [self presentModalViewController:ob animated:YES];

}

//Code of ViewDidLoad of Status.m
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, width, 43)];
    navBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    [self.view addSubview:navBar];
    [navBar release];

UIBarButtonItem *home = [[UIBarButtonItem alloc] initWithTitle:@"HOME" style:UIBarButtonItemStylePlain target:self action:@selector(homeMethod)];
self.navigationItem.rightBarButtonItem = home;

UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithTitle:@"Add" style:UIBarButtonSystemItemAdd target:self action:@selector(addMethod)]; 
self.navigationItem.leftBarButtonItem = add;


UILabel *label = [[UILabel alloc] initWithFrame:
                  CGRectMake(10,10,width-20,25)];
label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
label.text = @"Status";
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:25];
label.textAlignment = UITextAlignmentCenter;
[navBar addSubview:label];
[label release];

Любая идея, в чем проблема в коде? Я не понимаю, тогда ты можешь спросить меня снова, Я буду хвалить, если я получу решение моей проблемы

1 Ответ

4 голосов
/ 04 февраля 2011

Кажется, что self.navigationItem просматривается только UINavigationController (контроллер, а не панель). Сам бар не собирается это проверять.

Так что вы должны либо

1) Используйте настоящий UINavigationController, который поставляется с собственной панелью навигации и будет обрабатывать элементы навигации для вас. В этом случае сработает код self.navigationItem, приведенный выше. (вы должны рассмотреть self.navigationItem.title = @"Status";)

Если ваш UITableViewController будет загружать и выключать содержимое стека навигации, это путь, который вы должны выбрать в любом случае.

2) Используйте собственный элемент навигации UINavigationBar. За исключением того, что он, кажется, не поставляется с элементом навигации, поэтому вы должны добавить свой собственный:

UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"Status"];

[navBar setItems:[NSArray arrayWithObject:navItem]];
[navItem release];

и затем установите левую и правую кнопки как

[navBar topItem].leftBarButtonItem = add;
[add release];

[navBar topItem].rightBarButtonItem = home;
[home release];

Работа с UINavigationController / UINavigationBar / UINavigationItem может сбивать с толку, но, к счастью, Apple имеет достойное объяснение того, как все это работает вместе, в верхней части своей документации UINavigationController .

...