Apa itu StoryBoard ID dan bagaimana cara menggunakannya?

110

Saya baru mengenal pengembangan iOS dan baru-baru ini mulai menggunakan Xcode 4.5. Saya melihat untuk setiap viewController bahwa saya dapat mengatur beberapa variabel identitas termasuk ID storyboard. Apa ini dan bagaimana saya bisa menggunakannya?

masukkan deskripsi gambar di sini

Saya mulai mencari di stackoverflow dan tidak dapat menemukan penjelasan apa pun untuk itu. Saya berasumsi itu bukan hanya label bodoh yang dapat saya atur untuk mengingat pengontrol saya, kan? Apa fungsinya?

RTB
sumber

Jawaban:

132

ID storyboard adalah kolom String yang dapat Anda gunakan untuk membuat ViewController baru berdasarkan ViewController storyboard tersebut. Contoh penggunaan akan berasal dari ViewController apa pun:

//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];
}

Ini akan membuat MyCustomViewController berdasarkan storyboard ViewController yang Anda beri nama "MyViewController" dan menampilkannya di atas View Controller Anda saat ini

Dan jika Anda berada di delegasi aplikasi Anda, Anda dapat menggunakan

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

Edit: Cepat

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

Edit untuk Swift> = 3:

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

dan

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
Eric
sumber
Mari kita coba, dan bagaimana Anda mendapatkanself.storyboard
RTB
self.storyboard dapat diakses dari viewcontroller manapun. Saya akan mengedit jawaban saya sekarang sehingga Anda dapat melihat
Eric
Dan bagaimana jika perlu mengaksesnya dari AppDelegate saya atau kelas lain?
RTB
Menambahkan suntingan lain yang menunjukkan cara mengakses storyboard dari file apa pun.
Eric
1
self.storyboarddapat diakses dari pengontrol tampilan apa pun yang dimuat dari storyboard. Jika pengontrol tampilan tidak dimuat dari storyboard, properti itu adalah nihil.
merampok mayoff
13

Untuk menambah jawaban Eric dan memperbaruinya untuk Xcode 8 dan Swift 3:

ID storyboard melakukan persis seperti namanya: mengidentifikasi. Hanya saja mengidentifikasi sebuah controller tampilan dalam file storyboard. Begitulah cara storyboard mengetahui pengontrol tampilan yang mana.

Nah, jangan bingung dengan namanya. ID papan cerita tidak mengidentifikasi 'papan cerita'. Sebuah storyboard, menurut dokumentasi Apple, 'mewakili pengontrol tampilan untuk semua atau sebagian dari antarmuka pengguna aplikasi Anda.' Jadi, jika Anda memiliki gambar seperti di bawah ini, Anda memiliki storyboard bernama Main.storyboard yang memiliki dua pengontrol tampilan, yang masing-masing dapat diberi ID storyboard (ID mereka di storyboard).

masukkan deskripsi gambar di sini

Anda dapat menggunakan ID papan cerita pengontrol tampilan untuk membuat instance dan mengembalikan pengontrol tampilan tersebut. Anda kemudian dapat melanjutkan untuk memanipulasi dan menyajikannya sesuka Anda. Untuk menggunakan contoh Eric, katakanlah Anda ingin menyajikan pengontrol tampilan dengan pengenal 'MyViewController' saat tombol ditekan, Anda akan melakukannya dengan cara ini:

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

Harap perhatikan perubahan sintaks.

Taiwosam
sumber
Ikon peringatan kuning menunjukkan karena fakta bahwa pengontrol tampilan kedua tidak memiliki titik masuk dan / atau ID. Ini dapat diatasi dengan memberinya ID papan cerita atau menghubungkannya ke pengontrol tampilan lain di papan cerita. Dengan begitu, papan cerita tahu cara menjangkau dan mengidentifikasinya.
Taiwosam
Saya tidak dapat menemukan bidang ID Papan Cerita, jadi terima kasih untuk gambarnya. Ada di posisi yang sama di Xcode 9.
Isaac Bosca