Элемент кнопки 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.

Screenshot of my Storyboard

Screenshot of my app where the buttons should show up

Screenshot of the the setup of the controls in my view

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.