Панель навигации в добавленных контроллерах представления

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

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

Моя проблема заключается в том, чтобы определить, где я встраиваю панель навигации. Я пробовал V1, но он не дает желаемых результатов. Как я могу сделать так, чтобы у каждого представления была своя панель навигации?

введите здесь описание изображения

class ViewController: UIViewController {

    @IBOutlet var scrollView: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        //Changes Navi bar
        // navigationController!.navigationBar.barTintColor = UIColor(red: 237/255, green: 15/255, blue: 140/255, alpha: 1)
        // navigationController!.navigationBar.barStyle = UIBarStyle.Black

        // Do any additional setup after loading the view, typically from a nib.
        let v1 = storyboard!.instantiateViewControllerWithIdentifier("A") as! Offers
        let v2 : View2 = View2(nibName: "View2", bundle: nil)        
        let v3 = storyboard!.instantiateViewControllerWithIdentifier("C") as! DiscoveryPage

        self.addChildViewController(v1)
        self.scrollView.addSubview(v1.view)
        v1.didMoveToParentViewController(self)

        self.addChildViewController(v2)
        self.scrollView.addSubview(v2.view)
        v2.didMoveToParentViewController(self)

        self.addChildViewController(v3)
        self.scrollView.addSubview(v3.view)
        v3.didMoveToParentViewController(self)

        //Set the frame

        var v2Frame : CGRect = v2.view.frame
        v2Frame.origin.x = self.view.frame.width
        v2.view.frame = v2Frame

        var v3Frame : CGRect = v3.view.frame
        v3Frame.origin.x = self.view.frame.width * 2
        v3.view.frame = v3Frame

        self.scrollView.contentSize = CGSizeMake(self.view.frame.width * 3, self.view.frame.height)
    }
}

person Cari95    schedule 29.09.2015    source источник


Ответы (1)


Небольшое объяснение здесь, надеюсь, оно ответит на ваш вопрос.

Если вы используете UINavigationController для управления потоком контроллеров представления. Тогда вам не нужно предоставлять настраиваемую панель навигации для каждого контроллера представления, верхний левый и правый элемент кнопки панели и заголовок контроллера представления являются частью UINavigationItem и UINavigationItem является свойством UIViewController.

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

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

В раскадровке, если вы не видите элемент навигации, связанный с контроллером представления, вы можете перетащить элемент из объектов и поместить его внутрь контроллера представления:

Скриншот

Если вы нажмете на элемент навигации, вы сможете отредактировать эти три параметра в инспекторе свойств:

свойство элемента навигации

Если вы перетащите UIBarButtonItem из объектов в свой UINavigationItem, связанный с вашим UIViewController, он автоматически добавит его на левую кнопку панели.

person Adil Soomro    schedule 29.09.2015
comment
Спасибо за объяснение. В моем сценарии, какой контроллер представления я бы использовал для встраивания контроллера навигации? - person Cari95; 29.09.2015
comment
У вас уже есть контроллер навигации, сделайте его начальным контроллером представления из инспектора свойств. Прямо сейчас V1 является вашим начальным контроллером представления, то есть, когда ваше приложение загружается, оно отображает v1 как начальное представление. - person Adil Soomro; 29.09.2015
comment
Я сделал все, что вы сказали, и обновил картинку выше, чтобы проиллюстрировать, как выглядит моя раскадровка. Не могли бы вы объяснить, почему панель навигации не меняется, когда я горизонтально прокручиваю прокрутку V1. - person Cari95; 29.09.2015
comment
Итак, у вас есть еще UIScrollView для размещения еще UIViewController в V1? - person Adil Soomro; 29.09.2015
comment
Да, я использовал прокрутку для размещения трех других контроллеров представления. - person Cari95; 29.09.2015
comment
Я добавил код, к которому добавил контроллеры представления. Один из них — Xib-файл. - person Cari95; 29.09.2015
comment
Хорошо, в таком случае установите элемент навигации для каждого дочернего контроллера представления. а затем прослушайте прокрутку представления прокрутки, скажем, вы узнали, что вы показываете 2-й дочерний вид в этой позиции прокрутки, получите элемент навигации этого контроллера представления и установите его в элемент навигации v1 следующим образом: self.navigationItem = currentlyShowingVC.navigationItem; - person Adil Soomro; 29.09.2015
comment
Спасибо, я понимаю, что я должен делать, но я немного не понимаю, как выполнить это в коде. Не могли бы вы указать мне правильное направление, чтобы запрограммировать это в Swift. Извините, я новичок в программировании. - person Cari95; 29.09.2015
comment
Насколько я понимаю из вашего вопроса, вы пытаетесь реализовать поведение, подобное UIPageViewController. например, переходить туда и обратно с серией контроллеров представления. Если вы посмотрите этот учебник, вы поймете, что ваши требования могут быть выполнены с использованием UIPageViewController - person Adil Soomro; 29.09.2015
comment
Спасибо. Я посмотрю на это - person Cari95; 29.09.2015