質問: 作成中のアプリでiPhone4sで起動した時だけ、あるページを全く別の画面にしたいのですが、 どのような方法でやるのが適当でしょうか。xibファイルを2種類作成し、画面サイズで端末を判定する方法を考えていますが、そちらでよいでしょうか。
回答: デバイスによって、Storyboardを切り替える方法を考えてみます。「いや、どうしてもXibファイルの切り替えをしたい」とおっしゃるのでしたら、下のコードの中の`UIStoryboard`クラスを、`UINib`クラスに置き換えて読んでください。 このブログの記事を参考にしました。 iOSデバイスに応じて,使用するストーリーボードを変更する まず、Storyboardを複数作成します。サンプルでは、ふたつ作成し、名称をそれぞれ`Main`と`iPhoneMain`としています。Storyboardを新規に作成すると、まったくオブジェクトのない状態から始まるので、ある程度作り込んだものを複製したほうがいいかもしれません。 `AppDelegate.swift`ファイルを開き、`application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: )`メソッドを加筆します。 **AppDelegate.swift** ``` import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // デバイスの取得 let device = UIDevice.currentDevice() // デバイスのモデル名によって、Storyboardの名称を分岐 var sbName = "Main" if device.model.hasPrefix("iPhone") { // 4s以前かどうかは、スクリーンサイズで判別する let screenSize = UIScreen.mainScreen().bounds.size if screenSize.height <= 480.0 { // 高さ480ピクセル以下なら、4s sbName = "iPhoneMain" } } // 名称からStoryboardを呼んで、ViewControllerをインスタンス化 let storyboard = UIStoryboard(name: sbName, bundle: nil) if let viewController = storyboard.instantiateInitialViewController() { // メインウインドウのrootViewControllerに指定 self.window?.rootViewController = viewController } return true } 以下略 ``` `UIDevice`クラスのプロパティ`model`では、iPhoneの機種まで区別できないので、スクリーンサイズの判別と合わせ技で、iPhone 4s(以前)かどうかを調べています。 まあ、スクリーンサイズだけで判別してもいい気はしますけど。