"self.navigationItem.rightBarButtonItem" не работает

У меня есть следующий код, взятый прямо из примера кода NavBar от Apple. Я поместил это в метод viewDidLoad для представления в моем приложении, которое представлено модально, и оно не будет работать.

UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"AddTitle", @"")
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(addAction:)] autorelease];
self.navigationItem.rightBarButtonItem = addButton;

Какие-либо предложения?

4 ответа

Решение

Вам нужно использовать эти строки кода на странице, где вы представляете другой вид.

sceondController *obj=[[[sceondController alloc] initWithNibName:@"sceondController" bundle:nil] autorelease];
        UINavigationController *navController=[[[UINavigationController alloc] initWithRootViewController:obj] autorelease];

        [self.navigationController presentModalViewController:navController animated:NO];

и во втором представлении используйте тот же код, который вы используете для создания кнопки навигации.

Может быть, это решит вашу проблему.

Хорошо объяснил решение:

presentModalViewController: animated: представляет viewController модально, который не имеет UINavigationBar, так что вы можете сделать некоторые вещи:

  1. Добавить UINavigationBar в кончике вашего viewController и добавьте туда кнопку "Добавить" и все, что вам нужно настроить.
  2. Ты можешь использовать pushViewController:animated: чтобы показать viewController модально, который будет в стеке навигации и иметь UINavigationBar для вас, чтобы добавить свою кнопку
  3. Если ваш первый viewController не является UINavigationController, с помощью pushViewController:animated: не решит, так что вы можете представить UINavigationController Модально с вашим viewController в качестве rootViewController:
 YourViewController *viewController =[[[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil] autorelease];
    UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:viewController] autorelease];
    [self.navigationController presentModalViewController:navController animated:YES];

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

Я предполагаю, что ваш контроллер представления на самом деле UINavigationController и все остальное на месте. В этом случае я бы изменил две вещи.

  1. Я не хотел бы автоматически выпускать UIBarButtonItem. Это имеет тенденцию быть ненадежным с контроллерами представления, поэтому добавьте кнопку в список вещей, которые необходимо удалить при очистке

  2. Я бы использовал функцию setter для установки кнопки. Вот мой код, который работает в моем контроллере навигации

    clearAllButton = [[UIBarButtonItem alloc] initWithTitle:@"Очистить все" стиль: UIBarButtonItemStylePlain target: self action: @selector (rightButtonPressed:)];

    [[self navigationItem] setRightBarButtonItem: clearAllButton];

Запустите ваше приложение на реальном устройстве. В iOS6 он не работает на симуляторе.

Другие вопросы по тегам