Как переключаться между раскадровками без использования контроллера панели вкладок - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть 3 раскадровки (основной, первый и второй), Storyboard Main содержит две кнопки внутри своего вида в левом верхнем углу (кнопка: первая и кнопка: вторая), без использования контроллера панели вкладок, как я могу переключаться между Первое и второе из главной раскадровки, при этом две кнопки всегда видны? Я пытался использовать Storyboard Reference, но при выборе одной из кнопок она просто переходит в выбранную раскадровку, и это не работает, потому что кнопки должны быть видны в контейнере представления из главной раскадровки, представление контейнера, как вариант, но не уверен как переключаться между раскадровками в этом контейнере вида, оставляя кнопки видимыми.

Пожалуйста, помогите. Спасибо enter image description here

1 Ответ

0 голосов
/ 01 сентября 2018

Вам не нужно использовать ссылку на раскадровку в Интерфейсном Разработчике. Вы создаете ссылки программно, что, на мой взгляд, проще и легче для понимания.

Интерфейсный Разработчик

Убедитесь, что вы установили FirstViewController и SecondViewController в качестве начальных контроллеров соответствующих раскадровок, отметив «Is Initial View Controller».

Interface Builder Setup

код

class MainViewController: UIViewController {
    @IBOutlet weak var contentView: UIView!

    // Initialize the first view controller of storyboard
    let firstViewController: FirstViewController = {
        let storyboard = UIStoryboard(name: "First", bundle: nil)
        return storyboard.instantiateInitialViewController() as! FirstViewController
    }()

    // Initialize the second view controller of storyboard
    let secondViewController: SecondViewController = {
        let storyboard = UIStoryboard(name: "Second", bundle: nil)
        return storyboard.instantiateInitialViewController() as! SecondViewController
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        show(childViewController: firstViewController)
    }

    @IBAction func showFirstVC(_ sender: Any) {
        // Don't show the first view controller again if it's already visible
        guard firstViewController.parent != self else { return }
        removeAllChildViewControllers()
        show(childViewController: firstViewController)
    }

    @IBAction func showSecondVC(_ sender: Any) {
        // Don't show the second view controller again if it's already visible
        guard secondViewController.parent != self else { return }
        removeAllChildViewControllers()
        show(childViewController: secondViewController)
    }

    // MARK: - Helper methods
    // Show a view controller in the `contentView`
    func show(childViewController vc: UIViewController) {
        self.addChildViewController(vc)
        self.contentView.addSubview(vc.view)
        vc.didMove(toParentViewController: self)
    }

    // Remove a view controller from the `contentView`
    func remove(childViewController vc: UIViewController) {
        vc.willMove(toParentViewController: nil)
        vc.removeFromParentViewController()
        vc.view.removeFromSuperview()
    }

    // Remove all child view controllers
    func removeAllChildViewControllers() {
        for childVC in self.childViewControllers {
            remove(childViewController: childVC)
        }
    }
}
...