Элемент кнопки Bar не отображается в navigationBar
Я работаю над приложением, где мой контроллер начального вида встроен в контроллер навигации и контроллер панели вкладок.
в моем приложении у меня есть 3 вкладки, одна вкладка параметры. Это tableview с 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) и перестраивает (CMD + B).
следующие изображения скриншот части моего раскадровки и скриншот моего приложения в представлении, где кнопки не будут отображаться.
редактировать
добавлен новый скриншот об элементах управления в представлении. Они не работают с или без дополнительного кода в моем viewDidLoad.
6 ответов
удалите свой первый навигационный контроллер, во-вторых, вам не нужно добавлять кнопку "назад", просто используйте push segue, в-третьих, попробуйте использовать self.navigationItem.leftBarButtonItem(попробуйте добавить себя в начале.) * Оригинальный ответ был комментарием.
вместо
navigationController?.navigationItem.leftBarButtonItem = leftItem
do
navigationItem.leftBarButtonItem = leftItem
обновление Я предлагаю вам добавить их непосредственно в раскадровку вашего Viewcontroller
у меня было два сегмента:один через раскадровку и один программный. Раскадровка segue показала кнопки, как и ожидалось. Однако прогамматический сегмент показывал вид без кнопок.
для программного сегмента я использовал:
present(theNewVC, animated: true)
кнопки появились и функционировали правильно, когда я изменил это на:
show(theNewVC, sender: self)
согласно документации, present(...)
представляет контроллер представления модально. Видимо контроллер модальное представление не кнопки навигационной панели. Я также подтвердил это, изменив свою раскадровку segue на Present Modally
- и кнопки исчезли там же.
(Используя Xcode 9, Swift 4)
Я также столкнулся с той же проблемой.
в iOS 11 он работает нормально, но для iOS 10 или менее он не показывал UIBarButtonItems, которые добавлены программно.
пожалуйста, назначьте фрейм UIBarButtonItem.
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "img_name"), for:.normal)
button.addTarget(self, action: #selector(btnAction), for: .touchUpInside)
button.frame = CGRect(x:0, y:0, width:32, height:32)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
Это случилось со мной недавно. Я делал то, о чем говорил Эрсин, но безрезультатно. Отступив еще немного и выяснил, что это был виновник:
nav.pushViewController(notifications, animated: false)
nav.pushViewController(interactionCreateOrEdit, animated: false)
Я изменил его на
nav.setViewControllers([notifications, interactionCreateOrEdit], animated: false)
и UIBarButtonItems начали появляться снова.
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.