Проблема с навигационным контроллером - PullRequest
0 голосов
/ 02 октября 2011

У меня есть следующее:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath(NSIndexPath*)indexPath
{

     audiChassisInputViewController = [[myAudiChassisInputViewController alloc] init];    

    [self.navigationController pushViewController:audiChassisInputViewController animated:YES];

    self.navigationController.navigationBarHidden = NO;

    UIBarButtonItem *retourButton = [[UIBarButtonItem alloc] initWithTitle:@"Retour" style:UIBarButtonItemStyleBordered target:self.navigationController action:@selector(popViewControllerAnimated:)]; 
    [self.navigationController.navigationBar.topItem setLeftBarButtonItem:retourButton];
    [self.navigationController.navigationBar.topItem setTitle:@"Chassis Input"];
    [retourButton release];

    [audiChassisInputViewController release];

}

, и это работает ... отображается новое представление.

в новом представлении:

myAudiChassisInputViewController.h

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    chassisInputTextView.layer.cornerRadius = 15;
    chassisInputTextView.clipsToBounds = YES;
    [chassisInputTextView becomeFirstResponder];

    UIBarButtonItem *okButton = [[UIBarButtonItem alloc] initWithTitle:@"OK" style:UIBarButtonItemStyleBordered target:self action:@selector(chassisOkPressed)];  
    [self.navigationController.navigationBar.topItem setRightBarButtonItem:okButton];
    [okButton release];

}

У меня нет ошибки, но не отображается кнопка правой панели. Никто, есть идеи, почему?

Ответы [ 3 ]

2 голосов
/ 02 октября 2011

Изменить эту строку:

[self.navigationController.navigationBar.topItem setRightBarButtonItem:okButton];

с этой строкой:

[[self navigationItem] setRightBarButtonItem:okButton];

Дело в том, что ко времени выполнения viewDidLoad верхний элемент панели навигации (self.navigationController.navigationBar.topItem) все еще указывает на элемент навигации контроллера заднего вида .

Контроллер заднего вида - это тот, который был контроллером верхнего вида до того, как текущий контроллер верхнего вида был помещен в стек ([[viewControllers objectAtIndex:[viewControllers count] - 2] navigationItem]). В следующем фрагменте показано, как верхний элемент панели навигации по-прежнему указывает на элемент навигации контроллера заднего вида в viewDidLoad и только для иллюстрации:

// the view controllers currently on the navigation stack
NSArray *viewControllers = self.navigationController.viewControllers;
// The root view controller is at index 0 in the array, the back view controller is at index n-2, and the top controller is at index n-1, where n is the number of items in the array.
UIViewController *backViewController = [viewControllers objectAtIndex:[viewControllers count] - 2];
// get the navigation item of the back view controller
UINavigationItem *backNavigationItem = backViewController.navigationItem;
UINavigationItem *topItem = self.navigationController.navigationBar.topItem;
if  (backNavigationItem == topItem) {
    NSLog(@"This gets logged to the console");
}
1 голос
/ 02 октября 2011

Перейдите к вашему

myAudiChassisInputViewController.m file

поместите следующий код

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIBarButtonItem *retourButton = [[UIBarButtonItem alloc] initWithTitle:@"Retour" style:UIBarButtonItemStyleBordered target:self.navigationController action:@selector(popViewControllerAnimated:)];

    UIBarButtonItem *itemOkey=[[UIBarButtonItem alloc] initWithTitle:@"OK" style:UIBarButtonItemStyleBordered target:self action:@selector(chassisOkPressed)];

    self.navigationItem.rightBarButtonItem=itemOkey;
    self.navigationItem.leftBarButtonItem=retourButton;
}

У меня есть следующие допустимые выходные данныеиметь enter image description here

Надеюсь, это поможет вам.

0 голосов
/ 02 октября 2011

Если у вас есть xib-файл вашего класса, то добавьте контроллер навигации и добавьте панель навигации, а под ней добавьте UIBarButton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...