di iOS6 saya melihat Tampilan Kontainer baru tetapi saya tidak yakin cara mengakses controller itu dari tampilan yang mengandung.
Skenario:
Saya ingin mengakses label di pengontrol tampilan Alert dari pengontrol tampilan yang menampung tampilan wadah.
Ada segue di antara mereka, bisakah saya menggunakannya?
ios
objective-c
swift
uiviewcontroller
uicontainerview
Adam Waite
sumber
sumber
Jawaban:
Ya, Anda dapat menggunakan segue untuk mengakses pengontrol tampilan anak (dan tampilan serta subview). Berikan segue pengidentifikasi (seperti
alertview_embed
), menggunakan inspektur Atribut di Storyboard. Kemudian mintalah pengontrol tampilan induk (yang menampung tampilan wadah) menerapkan metode seperti ini:sumber
Anda dapat melakukannya hanya dengan
self.childViewControllers.lastObject
( dengan asumsi Anda hanya memiliki satu anak, jika tidak gunakanobjectAtIndex:
).sumber
childViewControllers
"terlalu cepat"untuk Pemrograman Swift
Anda bisa menulis seperti ini
sumber
The
prepareForSegue
pendekatan bekerja, tapi hal itu bergantung pada segue identifier sihir tali. Mungkin ada cara yang lebih baik.Jika Anda tahu kelas VC yang Anda cari, Anda dapat melakukannya dengan sangat rapi dengan properti yang dihitung:
Ini bergantung pada
childViewControllers
. Sementara saya setuju itu bisa rapuh untuk mengandalkan yang pertama, penamaan kelas yang Anda cari membuat ini tampak cukup solid.sumber
return childViewControllers.filter { $0 is CamperVanViewController }.first
dalam satu linerchildViewControllers.flatMap({ $0 as? CamperVanViewController }).first
itu saya melakukan yang saya pikir sedikit lebih baik, karena itu membuang dan menghilangkan nil.first(where:)
.childViewControllers.first(where: { $0 is CamperVanViewController })
Jawaban yang diperbarui untuk Swift 3, menggunakan properti yang dihitung:
Ini hanya mengulangi daftar anak-anak sampai mencapai pertandingan pertama.
sumber
self.childViewControllers
lebih relevan ketika Anda membutuhkan kontrol dari orang tua. Misalnya, jika pengontrol anak adalah tampilan tabel dan Anda ingin memuatnya dengan paksa atau mengubah properti melalui ketukan tombol atau peristiwa lain pada Pengontrol Tampilan Orang Tua, Anda dapat melakukannya dengan mengakses instance ChildViewController dan tidak melalui prepForSegue. Keduanya memiliki aplikasi mereka dengan cara yang berbeda.sumber
Ada cara lain menggunakan pernyataan switch Swift pada tipe view controller:
sumber
Saya menggunakan Kode seperti:
sumber
Jika seseorang mencari Swift 3.0 ,
viewController1 , viewController2 dan seterusnya akan dapat diakses.
sumber
Dengan generik Anda dapat melakukan beberapa hal manis. Berikut ini adalah ekstensi untuk Array:
Anda kemudian dapat melakukan ini di viewController Anda:
sumber
Anda bisa menulis seperti ini
sumber