Элемент навигации, не отображающийся на контроллере View
Извиняюсь, я новичок в программировании на iphone.
Я создал приложение Master-Detail Iphone (так что контроллер навигации пришел с проектом). Я перехожу к новому контроллеру представления, который я создал через UIBarButtonItem в masterviewcontroller. Однако, в отличие от диспетчера detailview (который пришел с проектом), я не могу заставить навигационный элемент (или навигационную панель?) Отображаться на экране, даже если он отображается в списке сцен моей раскадровки.
Вот какой код и скриншот:
В моей функции masterviewcontroller.m viewdidload()
UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:normal target:self action:@selector(goToSettings:)];
self.navigationItem.leftBarButtonItem = settingsButton;
в моем masterviewcontroller.m
- (IBAction)goToSettings:(id)sender{
[self performSegueWithIdentifier:@"SettingsSegue" sender:self];
}
Я попытался добавить заголовок к навигационному элементу во время функции viewDidLoad нового созданного класса viewcontroller.m(упомянутого в этой ссылке, но это не сработало)
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"Settings";
self.navigationItem.leftBarButtonItem = self.editButtonItem;
}
Но он все еще отображается в моей раскадровке (он отображается в списке под сценой, но не отображается на экране)
Итак, мой вопрос в том, почему он теперь появляется и как мне его получить? Я хочу кнопку обратной кнопки, например, мой контроллер подробных представлений, который поставляется с проектом master-detail.
РЕДАКТИРОВАТЬ # 1
Я добавил проверку на то, что контроллер навигации равен нулю, и это не nil (оператор if никогда не вводится). Я также попытался изменить элемент навигации назад и удалить, и никто не сработал.
if(self.navigationItem == nil)
{
[ self.navigationItem init];
}
self.navigationItem.title = @"Settings";
self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;
Теперь, когда у меня достаточно репутации, чтобы показать изображение, я могу показать, что элемент навигации отображается в списке, но не отображается в представлении
![enter image description here]()
Ответы
Ответ 1
Элемент Navigation не отображался из-за "стиля" моего сеанса.
Сегг, который перемещал сцену с контроллера главного представления на контроллер представления настроек, был установлен на "модальный". Он должен быть установлен на "push". Это делается из раскадровки на панели утилит
Ответ 2
Вы должны изменить стиль Segue, выполнив следующие действия:
- Выберите Segue в вашей раскадровке;
- Перейдите к инспектору атрибутов (на вкладках правой панели);
- Измените атрибут Style для Push.
Это сделает рулон экрана справа налево, и панель навигации будет скользить.
С Modal экран будет снижаться в верхней части экрана, и это не приведет к появлению панели навигации.
Ответ 3
Проблема в моем случае заключалась в том, что контроллер навигации не был "начальным контроллером представления"
Так что я должен был это сделать
![enter image description here]()
Ответ 4
Вы подтвердили, что ваш контроллер навигации, указанный в методе viewDidLoad, не равен нулю?
Предполагая, что у вас правильно есть self.navigationItem
, который не равен нулю, кажется, что вы неправильно устанавливаете self.navigationItem.leftBarButtonItem
в editButtonItem
, вместо этого попробуйте удалить все это вместе!
Если удаление не устраняет проблему, попробуйте:
self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;
Ответ 5
Проверьте, является ли ваш контроллер просмотра контроллером корневого контроллера контроллера навигации. Вы не можете прямо представлять контроллер представления в качестве модального контроллера. Вы должны сделать свой контроллер представлений в качестве контроллера корневого представления контроллера навигации, а затем представить свой контроллер навигации в качестве модального контроллера.
// Create the root view controller for the navigation controller
// The new view controller configures a Cancel and Done button for the
// navigation bar.
YourViewController *addController = [[YourViewController alloc]
init];
// Configure the YourViewController.
// Create the navigation controller and present it.
UINavigationController *navigationController = [[UINavigationController alloc]
initWithRootViewController:addController];
[self presentViewController:navigationController animated:YES completion: nil];