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


110

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

ここに画像の説明を入力してください

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

回答:


132

ストーリーボードIDは、そのストーリーボードViewControllerに基づいて新しいViewControllerを作成するために使用できるStringフィールドです。使用例は、任意の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)

レッツ・トライこと、そしてどのように入手できますかself.storyboard
RTB

self.storyboardは、任意のビューコントローラーからアクセスできます。私は今あなたが見ることができるように私の答えを編集します
エリック

そして、私のAppDelegateまたは他のクラスからそれにアクセスする必要がある場合はどうなりますか?
RTB

任意のファイルからストーリーボードにアクセスする方法を示す別の編集を追加しました。
エリック

1
self.storyboardストーリーボードからロードされた任意のビューコントローラーからアクセスできます。ビューコントローラーがストーリーボードから読み込まれなかった場合、そのプロパティはnilです。
rob mayoff

13

エリックの回答に追加して、Xcode 8とSwift 3に合わせて更新するには:

ストーリーボードIDは、名前が意味することを正確に実行します。識別します。ストーリーボードファイルでビューコントローラー識別するだけです。これは、ストーリーボードがどのビューコントローラーがどれであるかを知る方法です。

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

ここに画像の説明を入力してください

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

@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)
}

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


黄色の警告アイコンは、2番目のビューコントローラーにエントリポイントやIDがないことを示しています。これには、ストーリーボードIDを与えるか、ストーリーボード内の別のビューコントローラーに接続することで対処できます。このようにして、ストーリーボードは、それに到達して識別する方法を知っています。
Taiwosam

ストーリーボードIDフィールドが見つかりませんでした。写真に感謝します。それは、Xcodeの9上の同じ位置にあります
アイザックBosca
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.