Oh man, ini membuat saya sakit kepala selama beberapa hari dan tidak tahu bagaimana melakukan ini. Bagian terburuknya adalah membuat proyek Xcode iOS baru dengan templat detail induk bekerja dengan baik. Untungnya, pada akhirnya, fakta kecil itu adalah bagaimana saya menemukan solusinya.
Ada beberapa posting yang saya temukan yang menyarankan bahwa solusinya adalah mengimplementasikan primaryViewControllerForCollapsingSplitViewController:
metode baru UISplitViewControllerDelegate
. Saya mencoba itu tidak berhasil. Apa yang dilakukan Apple dalam templat master-detail yang tampaknya berfungsi adalah mengimplementasikan splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
metode pendelegasian yang baru (tarik napas dalam-dalam untuk semua ini) (lagi aktif UISplitViewControllerDelegate
). Menurut dokumen , metode ini:
Minta delegasi untuk menyesuaikan pengontrol tampilan primer dan untuk memasukkan pengontrol tampilan sekunder ke dalam antarmuka yang diciutkan.
Pastikan untuk membaca bagian diskusi dari metode itu untuk perincian yang lebih spesifik.
Cara Apple menangani ini adalah:
- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
ontoPrimaryViewController:(UIViewController *)primaryViewController {
if ([secondaryViewController isKindOfClass:[UINavigationController class]]
&& [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
&& ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
// Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return YES;
} else {
return NO;
}
}
Implementasi ini pada dasarnya melakukan hal berikut:
- Jika
secondaryViewController
apa yang kami harapkan (a UINavigationController
), dan itu menunjukkan apa yang kami harapkan (a DetailViewController
- pengontrol tampilan Anda), tetapi tidak memiliki model ( detailItem
), maka " Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
"
- Jika tidak, kembalilah "
NO
untuk membiarkan pengontrol tampilan terpisah mencoba dan menggabungkan konten pengontrol tampilan sekunder ke dalam antarmuka yang diciutkan"
Hasilnya adalah sebagai berikut untuk iPhone dalam potret (baik mulai dalam potret atau memutar ke potret - atau lebih tepatnya kelas ukuran kompak):
- Jika pandangan Anda benar
- dan memiliki model, tampilkan pengendali tampilan detail
- tetapi tidak memiliki model, tunjukkan pengontrol tampilan master
- Jika pandangan Anda salah
- tampilkan pengontrol tampilan master
Jelas seperti lumpur.
UISplitViewController
dan selalu kembaliYES
dari metode itu, lalu hanya mengubah kelas tampilan terpisah di Storyboard, karena saya selalu ingin menunjukkan master pada iPhone dalam potret. :)