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
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.
By accepting you will be accessing a service provided by a third-party external to http://h-mayer.de/