2017-01-16 6 views
0

Я пытаюсь построить довольно тривиальное приложение телефонной книги с помощью следующего тривиального процесса: FirstViewController ->SecondViewController ->ThirdViewController т.д.UINavigationViewController - другая правая кнопка на каждом последующем VC?

Я понимаю, что UINavigationController в точности один для обработки такого процесса. Итак, я вложил FirstViewController в NavigationController и добавил сегменты между контроллерами. Все идет нормально.

Моя проблема заключается в том, что панель навигации на каждом из контроллеров имеет другую правую кнопку (например, детальный вид будет иметь правую кнопку «Редактировать», вид редактирования будет иметь «Сохранить» и т. Д.). Я могу добавить правую кнопку только на FirstViewController (через Xcode), потому что этот VC получил пункт навигации (когда он встроен в контроллер навигации). В последующих VC нет такого элемента навигации, и даже если они получают панель навигации с помощью кнопки «Назад», я не могу найти способ (в Xcode) добавить правую кнопку.

Каким будет рекомендуемый способ добавления таких правых кнопок для каждого последующего контроллера вида (через Xcode или программно)?

ответ

0

Если вы хотите сделать это программно, вы можете настроить контент NavigationBar для каждого UIViewController непосредственно из них. Для этого вам необходимо установить этот элемент из своего свойства navigationItem. Из него вы можете установить несколько элементов, включая, но не ограничиваясь, rightBarButtonItems и leftBarButtonItems.

После того, как UIViewController будет перенесен в стек UINavigationController, эти параметры будут использоваться для настройки отображения панели навигации.

Для получения более подробной информации, смотрите на UINavigationItem документации

Edit: Вот хорошее объяснение о том, как добиться того, что вы хотите только от раскадровки https://www.andrewcbancroft.com/2016/04/14/adding-buttons-to-the-navigation-bar-with-storyboards/

0

Вы можете добавить панель навигации в каждом VC и внутри добавьте элемент, который вы хотите.

enter image description here

enter image description here

+0

Спасибо, но это не работает - всякий раз, когда я перетаскиваю панель навигации в VC, она заканчивается как дочерний элемент верхнего представления, что не имеет смысла. Есть ли что-то, что я могу потерять? –

0

Это немного сложнее. Сначала вы должны добавить элемент навигации во второй и третий контроллеры представлений. Похоже, что это в библиотеке:

enter image description here

Просто перетащите, что право на второй контроллер представления, а затем на третий контроллер представления.

Теперь вы сможете добавить элемент кнопки справа на второй и третий контроллеры представлений точно так же, как и для первого контроллера представления.

+0

Спасибо, но он не работает. Вот исходное содержимое VC: https://s24.postimg.org/83kocwj9x/Screen_Shot_2017_01_16_at_12_11_32_AM.png. Теперь, когда я перетаскиваю элемент навигации в этот VC, действительно, я получаю элемент навигации под названием «Заголовок», но ему не хватает элементов «Элементы кнопки« Левая панель »и« Элементы панели правой панели », и я не могу добавить к нему никаких кнопок : https://s24.postimg.org/700k0xymt/Screen_Shot_2017_01_16_at_12_13_20_AM.png –

0

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

func customizeRightBarButton() { 

    let rightBarButtonImage: UIImage = UIImage(named: "customImage") 
    let rightBarButton: UIButton = UIButton(type: .Custom) 
    rightBarButton.setImage(rightBarButtonImage, forState: .Normal) 
    rightBarButton.frame = CGRectMake(0, 0, 23, 23) 
    let barButtonItem: UIBarButtonItem = UIBarButtonItem(customView: rightBarButton) 
    rightBarButton.addTarget(self, action: #selector(ViewController.rightButtonClicked(_:)), forControlEvents: .TouchUpInside) 
    self.navigationItem.rightBarButtonItem = rightBarButton 
} 

Если вы хотите скрыть кнопку назад бар используйте

self.navigationItem.hidesBackButton = true 
    self.navigationItem.setHidesBackButton(true, animated: true) 
0

Я нашел легкий способ сделать это.

let barButton = UIBarButtonItem(image: UIImage(named: "YourImage"), style: .plain, target: self, action: #selector(yourClass.yourFunction(_:))) 

    self.navigationController?.topViewController?.navigationItem.rightBarButtonItem = barButton 

Добавить этот код и все контроллеры вида, которые вы хотите добавить правой кнопкой, кроме кнопки «Назад».

Я надеюсь, что этот код поможет вам!