Я думаю, что это должно быть просто, но я остаюсь царапать голову. У меня есть приложение с несколькими настройками ViewControllers в раскадровке. Я хочу, чтобы каждый из них имел одну и ту же навигационную панель в верхней части каждого вида, но этот навигационный контроллер имел одинаковые кнопки для всех видов. Контроллер навигации настроен в AppDelegate, и кнопки добавляются в ViewDidLoad каждого ViewController (в соответствии с ответом, который я получил здесь для другого вопроса), но на данный момент кнопки (и заголовок) не отображаются.Программно добавить кнопку в UINavigationController
Если UINavigationController настроен - AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
MainViewController* mainVC = [mainStoryboard instantiateInitialViewController];
UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:mainVC];
[self.window setRootViewController:navVC];
[_window makeKeyAndVisible];
return YES;
}
Один из Просмотры:
- (void)viewDidLoad
{
[self setTitle:@"Congress app"]; // < This does not set the title of the NavController
UIBarButtonItem *showSettingsButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showSettings:)];
UIBarButtonItem *showMenuButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menuButton.png"] style:UIBarButtonItemStylePlain target:self action:@selector(revealMenu:)];
//self.navigationItem.leftBarButtonItem = showMenuButton;
//self.navigationItem.rightBarButtonItem = showSettingsButton;
self.navigationController.navigationItem.leftBarButtonItem = showMenuButton;
self.navigationController.navigationItem.rightBarButtonItem = showSettingsButton;
UINavigationController *currentNav;
UIViewController *VCname;
NSLog(@"First left button in navigation controller - %@", [self.navigationController.navigationItem.leftBarButtonItems objectAtIndex:0]);
NSLog(@"First right button in navigation controller - %@", [self.navigationController.navigationItem.rightBarButtonItems objectAtIndex:0]);
[super viewDidLoad];
}
У меня есть несколько NSLogs, которые показывают, что (если ничего) в навигации контроллер показывает: и что указывает, что кнопки добавляются, но не отображаются?
EDIT:
Я просто вспомнил, что есть ViewController (InitViewController.m), который вызывается перед ВК в приведенном выше коде. Навигационный контроллер размещается здесь:
- (void)viewDidLoad
{
[super viewDidLoad];
self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainVC"];
}
Возможно, это является причиной проблемы.
EDIT 2:
Благодаря Saurav Mac я отслеживаемые проблему до меня пытается добавить кнопки на «неправильном» контроллер представления. У меня была настройка контроллера навигации в AppDelegate.m, первый контроллер просмотра - InitViewController, который затем вызывает MainViewController как «контроллер верхнего уровня». Не могу поверить, что я пропустил это, спасибо за помощь.
Удалено ли «Main» [ваше имя] раскадровки (так как вы вручную управляя первоначальный контроллер) на 'Настройки проекта> # целевой #> Deployment Info > Основной интерфейс'? – Alladinian
Чувак возвращается к основам, пытались ли вы сначала добавить простой барбатнитет, а не пытаться добавить кнопку изображения? Дайте мне знать, если это работает в первую очередь :) – Pavan
@Pavan - Я только что попробовал: [self.navigationItem setLeftBarButtonItem: [[UIBarButtonItem alloc] initWithTitle: @ "Title" style: UIBarButtonItemStylePlain target: noil action: @selector (showSettings :) ] анимированные: ДА]; еще не повезло ... – Ryan