

作成中のアプリでiPhone4sで起動した時だけ、あるページを全く別の画面にしたいのですが、  
どのような方法でやるのが適当でしょうか。xibファイルを２種類作成し、画面サイズで端末を判定する方法を考えていますが、そちらでよいでしょうか。


CC BY-SA 3.0
2015-06-22T02:40:24.520
11597
2016-11-02T05:25:38.020
2015-06-22T03:10:36.293
7362
8060
question
ios swift
iPhone4sだけ別のレイアウトにしたい


デバイスによって、Storyboardを切り替える方法を考えてみます。「いや、どうしてもXibファイルの切り替えをしたい」とおっしゃるのでしたら、下のコードの中の`UIStoryboard`クラスを、`UINib`クラスに置き換えて読んでください。

このブログの記事を参考にしました。

[iOSデバイスに応じて，使用するストーリーボードを変更する](http://qiita.com/tovi_01/items/33f4d0e9d5d1d9c99263)

まず、Storyboardを複数作成します。サンプルでは、ふたつ作成し、名称をそれぞれ`Main`と`iPhoneMain`としています。Storyboardを新規に作成すると、まったくオブジェクトのない状態から始まるので、ある程度作り込んだものを複製したほうがいいかもしれません。  
`AppDelegate.swift`ファイルを開き、`application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: )`メソッドを加筆します。

**AppDelegate.swift**

[code]

    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
        }
    
    以下略
    
[/code]

`UIDevice`クラスのプロパティ`model`では、iPhoneの機種まで区別できないので、スクリーンサイズの判別と合わせ技で、iPhone
4s（以前）かどうかを調べています。  
まあ、スクリーンサイズだけで判別してもいい気はしますけど。


CC BY-SA 3.0
2015-06-22T10:00:25.717
11611
2015-06-22T10:36:38.600
2015-06-22T10:36:38.600
7362
7362
11597
answer