web-dev-qa-db-ja.com

StoryBoard IDとは何ですか?これをどのように使用できますか?

私はIOS開発の初心者で、最近Xcode 4.5で開始しました。すべてのviewControllerについて、ストーリーボードIDを含むID変数を設定できることを確認しました。これは何で、どのように使用できますか?

enter image description here

Stackoverflowで検索を開始しましたが、説明が見つかりませんでした。私は自分のコントローラーを覚えておくために設定できる愚かなラベルだけではないと思いましたか?それは何をするためのものか?

108
RTB

ストーリーボードIDは、そのストーリーボードViewControllerに基づいて新しいViewControllerを作成するために使用できる文字列フィールドです。使用例は、ViewControllerからのものです。

//Maybe make a button that when clicked calls this method

- (IBAction)buttonPressed:(id)sender
{
    MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

   [self presentViewController:vc animated:YES completion:nil];
}

これにより、「MyViewController」という名前のストーリーボードViewControllerに基づいてMyCustomViewControllerが作成され、現在のView Controllerの上に表示されます。

また、アプリのデリゲートにいる場合は、使用できます

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

編集:スウィフト

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

Swift> = 3の編集:

@IBAction func buttonPressed(sender: Any) {
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

そして

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
129
Eric

エリックの答えに追加し、Xcode 8およびSwift 3向けに更新するには:

ストーリーボードIDは、名前が示すとおりに機能します。つまり、識別します。それだけidentifies a view controllerストーリーボードファイルで。それは、ストーリーボードがどのView Controllerがどれであるかを知る方法です。

ここで、名前と混同しないでください。ストーリーボードIDは「ストーリーボード」を識別しません。 Appleのドキュメントによると、ストーリーボードは「アプリのユーザーインターフェイスのすべてまたは一部のView Controllerを表します」。したがって、下の図のようなものがある場合、Main.storyboardという名前のストーリーボードがあり、2つのView Controllerがあり、それぞれにストーリーボードID(ストーリーボードのID)を割り当てることができます。

enter image description here

View ControllerのストーリーボードIDを使用して、そのView Controllerをインスタンス化して返すことができます。その後、好きなように操作して表示することができます。 Ericの例を使用するには、ボタンが押されたときに識別子「MyViewController」を持つView Controllerを表示したい場合、次のようにします。

@IBAction func buttonPressed(sender: Any) {
    // Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
    let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
    present(vc, animated: true, completion: nil)
}

構文の変更に注意してください。

11
Taiwosam