Элемент панели управления, не отображаемый в навигацииBar

Я работаю над приложением, в котором мой контроллер начального представления встроен в контроллер навигации и контроллер панели вкладок.

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

Когда я касаюсь одной из кнопок, у меня все еще есть красивая зеленая панель навигации, но мои кнопки не работают.

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

Я также добавил следующий код в свой viewDidLoad():

let leftItem = UIBarButtonItem(title: "< Back", style: .Done, target: self, action: Selector("Save"))
let rightItem = UIBarButtonItem(title: "Save", style: .Plain, target: self, action: Selector("Save"))

//self.parentViewController?.navigationItem.leftBarButtonItem = leftItem // also doesn't work

navigationController?.navigationItem.leftBarButtonItem = leftItem
navigationController?.navigationItem.rightBarButtonItem = rightItem

Но это не будет иметь никакого эффекта.

Я проверил, был ли верный UIViewController назначен моему представлению в раскадровке, сделал несколько чистых сборок (CMD + Shift + K) и Rebuilds (CMD + B).

Следующие изображения представляют собой скриншот части моей раскадровки и снимок экрана моего приложения в представлении, в котором кнопки не будут отображаться.

ИЗМЕНИТЬ

Добавлен новый снимок экрана об элементах управления в представлении. Они не работают с или без дополнительного кода в моем представленииDidLoad.

Снимок экрана моей раскадровки

Снимок экрана моего приложения, в котором должны появляться кнопки

Снимок экрана настройки элементов управления в моем представлении

Ответ 1

Удалите свой первый контроллер навигации, второй вам не нужно добавить кнопку возврата, просто используйте push segue, третье попробуйте использовать self.navigationItem.leftBarButtonItem(попробуйте добавить себя в начале.) * Оригинальный ответ был комментарием.

Ответ 2

Вместо

navigationController?.navigationItem.leftBarButtonItem = leftItem

do

navigationItem.leftBarButtonItem = leftItem

Обновление. Я предлагаю вам добавить их прямо в раскадровку в Viewcontroller

Ответ 3

У меня было два segues: один через раскадровку segue и один программный. Сценарий раскадровки показал кнопки, как ожидалось. Тем не менее, прогематический сегмент показывал вид без кнопок.

В программном сегменте я использовал:

present(theNewVC, animated: true)

Кнопки появились и функционировали правильно, когда я изменил это:

show(theNewVC, sender: self)

В документации, present(...) представляет контроллер представления по модулю. По-видимому, контроллер модального представления не получает кнопки навигационной панели. Я также подтвердил это, изменив мою раскладку на Present Modally - и кнопки тоже исчезли.

(Использование Xcode 9, Swift 4)

Ответ 4

Это случилось со мной в последнее время. Я делал то, что говорил Эрсин, но безрезультатно. Отступил немного больше и узнал, что это преступник:

nav.pushViewController(notifications, animated: false) nav.pushViewController(interactionCreateOrEdit, animated: false)

Я изменил его на

nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)

и UIBarButtonItems начали появляться снова.

Ответ 5

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];

    [button setImage:[[UIImage imageNamed:@"BtnBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
    [button.imageView setTintColor:[UIColor whiteColor]];
    [button addTarget:self action:@selector(buttonClicked:)
     forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]
                                   initWithCustomView:button];
    self.navigationItem.leftBarButtonItem = buttonItem;

этот код записывается в метод ViewWillAppear.