"self.navigationItem.rightBarButtonItem" не работает - PullRequest
3 голосов
/ 23 сентября 2011

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

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

Есть предложения?

Ответы [ 4 ]

2 голосов
/ 23 сентября 2011

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

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];

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

1 голос
/ 23 сентября 2011

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

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

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

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

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

0 голосов
/ 22 октября 2012

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

0 голосов
/ 23 сентября 2011

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

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

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

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

    [[self navigationItem] setRightBarButtonItem: clearAllButton];

...