Apakah biasanya praktik pemrograman yang buruk di iOS memiliki tampilan pengontrol tampilan bersarang di dalam tampilan UIViewController? Katakanlah misalnya saya ingin memiliki beberapa jenis elemen interaktif yang merespons sentuhan pengguna, tetapi mungkin hanya menempati 25% dari layar.
Saya kira saya akan menambahkan pengontrol tampilan bersarang ini ke UIViewController saya dengan mengatakan sesuatu seperti:
[self.view addSubview: nestedViewController.view];
ios
uiviewcontroller
viewcontroller
Skyler
sumber
sumber
Jawaban:
Tidak, ini umumnya desain yang bagus, ini membantu pengontrol tampilan Anda tetap ringkas. Namun Anda harus menggunakan pola penahanan pengontrol tampilan, lihat dokumentasi berikut.
Menerapkan Pengontrol Tampilan Penampung
Ini sangat mudah untuk disiapkan menggunakan Pembuat Antarmuka dengan Papan Cerita juga, lihat Tampilan Penampung di pustaka objek.
Berikut adalah contoh yang dibuat-buat di Storyboard. Dalam contoh ini Anda akan memiliki 4 pengontrol tampilan, satu yang menampung 3 kontainer, dan satu untuk setiap kontainer. Saat Anda menampilkan pengontrol paling kiri yang memiliki semua container, Storyboard akan secara otomatis menginisialisasi dan menyematkan 3. lainnya. Anda dapat mengakses pengontrol tampilan anak ini melalui
childViewControllers
properti atau ada metode yang dapat Anda timpaprepareForSegue:sender:
dan menangkap pengontrol tampilan tujuan segue akan dipanggil. Ini juga merupakan titik yang baik untuk meneruskan properti ke pengontrol tampilan anak jika diperlukan.sumber
Saya meletakkan kode ini di pengontrol tampilan orang tua. Ini bekerja dengan baik untuk saya.
Obj C
-(void)viewDidLoad{ [super viewDidLoad]; InnerViewController *innerViewController = [self.storyboard instantiateViewControllerWithIdentifier:INNER_VIEW_CONTROLLER]; [self addChildViewController:innerViewController]; [self.view addSubview:innerViewController.view]; [innerViewController didMoveToParentViewController:self]; }
Swift :
let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildViewController"), self.addChildViewController(childViewController) self.view.addSubview(childViewController.view) childViewController.didMove(toParentViewController: self)
Pilihan lainnya adalah dengan menggunakan IB dan meletakkan tampilan kontainer. UIViewController akan muncul secara otomatis (XCode 9 dalam kasus ini):
sumber
Ini solusi Swift 3 saya berdasarkan jawaban Swift Developers On FB
let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildPageViewController"), self.addChildViewController(childViewController) self.view.addSubview(childViewController.view) childViewController.didMove(toParentViewController: self)
sumber