UISplitViewController mit drei Spalten im SceneDelegate erstellen

 Wir wollen im SceneDelegate statt auf das Main-Storyboard und die dort erstellten Controller zurückzugreifen eine ViewController-Hierarchie programmatisch aufbauen, in der der RootController ein UISplitViewController ist und dieser drei Spalten ermöglicht.

Wir erzeugen dazu ein neues iOS-App-Projekt. Anschliessend löschen wir

  • die Datei Main.storyboard
  • die diesbezüglichen zwei Einträge in der Info.plist
    • Main storyboard file base name
    • Storyboard Name  in der Application Scene Manifest Gruppe 

Für eine  Demo erweitern wir nun den ViewController wie folgt:


var color : UIColor = .blue

override func viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

self.view.backgroundColor = color

} 

Als nächsten Schritt müssen wir den UISplitViewController im SceneDelegate erstellen:

  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        /// 1. Capture the scene
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        /// 2. Create a new UIWindow using the windowScene constructor which takes in a window scene.
        let window = UIWindow(windowScene: windowScene)
        
        /// 3. Create a view hierarchy programmatically
        let primaryViewController = ViewController()
        primaryViewController.color = .red
        
        let supplementaryViewController = ViewController()
        supplementaryViewController.color = .yellow
        
        let secondaryViewController = ViewController()
        secondaryViewController.color = .green
        
        let splitViewController = UISplitViewController(style: .tripleColumn)
        splitViewController.setViewController(primaryViewController, for: .primary)
        splitViewController.setViewController(supplementaryViewController, for: .supplementary)
        splitViewController.setViewController(secondaryViewController, for: .secondary)
        
        
        /// 4. Set the root view controller of the window with your view controller
        window.rootViewController = splitViewController
        
        /// 5. Set the window and call makeKeyAndVisible()
        self.window = window
        window.makeKeyAndVisible()
    } 

Kompilieren und fertig. Wenn man in der Deployment Info des Targets auch Mac ankreuzt funktioniert es auch unter macOS.

Emoji in ListItems eines UICollectionViews
Xcode 11.4 : Fehler im Master-Detail-Template

By accepting you will be accessing a service provided by a third-party external to http://h-mayer.de/