Подтвердить что ты не робот

Элемент навигации, не отображающийся на контроллере 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

4b9b3361

Ответ 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];