4385


Xcode 6 + Swift で、
セグエを使用しない画面遷移をしたいのですが、ビルドしても上手く遷移しません。セグエなしで画面遷移するしようとして、遷移先のストーリーボード上の画面の
`Storyborad ID` に `next` という名前で設定した場合、コードは以下のようで合っているでしょうか?

お詳しい方がいましたらご回答宜しくお願い致します。

[code]

    import UIKit
        class ViewController: UIViewController {
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
            }
    
            override func didReceiveMemoryWarning() {
                super.didReceiveMemoryWarning()
                // Dispose of any resources that can be recreated.
            }
    
            @IBAction func nextPage() {
                //nextと名付けた画面に遷移したい
                // var nex = UIViewController()
                var nex : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("next")
                self.presentViewController(nex as UIViewController, animated: true, completion: nil)
    
            }
    
        }
    
[/code]

【補足】  
ちなみにビルドしたときに、

[code]

    var nex : AnyObject! = self.storyboard.instantiateViewControllerWithIdentifier("next")
    
[/code]

のところで「"UIStoryboard?" does not have member named
"instantiateViewControllerWithIdentifier"」と表示されてしまいます。


CC BY-SA 3.0
2015-01-10T11:08:27.057
4371
2015-01-10T19:28:26.503
2015-01-10T17:01:38.170
5832
5832
question
swift xcode storyboard
Xcode(Swift)でのセグエを使わない画面遷移について


遷移元のViewControllerと遷移先のViewControllerが同じStoryboard上にあれば、問題ないと思います。

遷移元のViewControllerと遷移先のViewControllerが同じStoryboard上にない場合は、以下で遷移するはずです。

[code]

    @IBAction func nextPage() {
        //nextと名付けた画面に遷移したい
        // var nex = UIViewController()
        var nex = UIStoryboard(name: "Storyboardのファイル名", bundle: nil).instantiateViewControllerWithIdentifier("next") as UIViewController
        self.presentViewController(nex, animated: true, completion: nil)
    }
    
[/code]


CC BY-SA 3.0
2015-01-10T14:01:18.197
4378
2015-01-10T14:15:39.457
2015-01-10T14:15:39.457
5710
5710
4371
answer


`self.storyboard` が返す `UIStoryboard?`（オプショナル）は `UIStoryboard`
そのものではないので、そのままメソッド `instantiateViewControllerWithIdentifier()` を呼び出すことはできません：  
[storyboard - UIViewController Class
Reference](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instp/UIViewController/storyboard)

オプショナルは存在しない可能性のある値を表すもので、メソッドを呼び出すには、何らかの方法で値が存在することを確定させる（アンラップ）必要があります。

アンラップの仕方については、（私の説明と少し違うところがあるかもしれませんが）次の記事を参考にしてみてください：  
[[Swift] Optional 型についてのまとめ Ver2 -
Qiita](http://qiita.com/cotrpepe/items/518c4476ca957a42f5f1#optional-%E5%9E%8B%E3%81%AF%E9%9D%9E-optional-%E5%9E%8B%E3%81%A8%E5%90%8C%E3%81%98%E3%82%88%E3%81%86%E3%81%AB%E3%81%AF%E6%89%B1%E3%81%88%E3%81%AA%E3%81%84)


CC BY-SA 3.0
2015-01-10T19:28:26.503
4385
2015-01-10T19:28:26.503
2299
4371
answer