簡體   English   中英

iOS Swift-在容器視圖內實現SplitViewController

[英]iOS Swift - implementation of SplitViewController inside a Container View

我正在關注本教程鏈接

但是從一開始我就做了一次更改。

我添加了一個ViewController(並使其成為了初始視圖控制器)並在其中添加了一個容器視圖。

然后,將seageed嵌入在View容器和教程的SplitViewController之間。

一切順利,直到我執行此步驟:

轉到AppDelegate.swift並將應用程序(_:didFinishLaunchingWithOptions :)的實現替換為以下內容:

guard let splitViewController = window?.rootViewController as? UISplitViewController,
  let leftNavController = splitViewController.viewControllers.first as? UINavigationController,
  let masterViewController = leftNavController.topViewController as? MasterViewController,
  let detailViewController = splitViewController.viewControllers.last as? DetailViewController
  else { fatalError() }

let firstMonster = masterViewController.monsters.first
detailViewController.monster = firstMonster

return true

如何修改此代碼以適合我的情況?

在您的情況下,您將無法訪問AppDelegate中的uisplitviewcontroller。 由於您正在使用容器嵌入式視圖,如下圖所示。 您可以從第一個viewController的prepareFor序列中獲取UISplitviewcontroller的引用。 因此,與其在AppDelegate中編寫代碼,不如嘗試在初始viewController中准備segue。

在此處輸入圖片說明 在此處輸入圖片說明

ViewController的初始類ViewController:UIViewController {

            @IBOutlet weak var containerView: UIView!
            override func viewDidLoad() {
                super.viewDidLoad()

                // Do any additional setup after loading the view.
            }

            override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

                if segue.identifier == "embedseg" {
                    guard let splitViewController = segue.destination as? UISplitViewController,
                        let leftNavController = splitViewController.viewControllers.first as? UINavigationController,
                        let masterViewController = leftNavController.topViewController as? MasterViewController,
                        let rightNavController = splitViewController.viewControllers.last as? UINavigationController,
                        let detailViewController = rightNavController.topViewController as? DetailViewController
                        else { fatalError() }

                    let firstMonster = masterViewController.monsters.first
                    detailViewController.monster = firstMonster

                    masterViewController.delegate = detailViewController

                    detailViewController.navigationItem.leftItemsSupplementBackButton = true
                    detailViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem
                }

            }
        }

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM