Элемент панели управления, не отображаемый в навигации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.