О людино, це викликало у мене головний біль протягом декількох днів і не міг зрозуміти, як це зробити. Найгірше було те, що створення нового проекту XOS iOS з шаблоном детальної інформації про майстер добре працювало. На щастя, врешті-решт, цей маленький факт полягав у тому, як я знайшов рішення.
Я знайшов кілька публікацій, які підказують, що рішення полягає в тому, щоб реалізувати новий primaryViewControllerForCollapsingSplitViewController:
метод UISplitViewControllerDelegate
. Я намагався це безрезультатно. Що Apple робить у шаблоні детальної інформації, який, здається, працює, це реалізувати новий (зробити глибокий вдих, щоб сказати все це) splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
делегатський метод (знову ж таки UISplitViewControllerDelegate
). Згідно з документами , цей метод:
Просить делегата налаштувати основний контролер подання та включити вторинний контролер подання в згорнутий інтерфейс.
Не забудьте прочитати в дискусійній частині цього методу більш детальну інформацію.
Apple впорається з цим:
- (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;
}
}
Ця реалізація в основному робить наступне:
- Якщо
secondaryViewController
це те, що ми очікуємо (a UINavigationController
), і це показує, що ми очікуємо (a DetailViewController
- ваш контролер перегляду), але не має моделі ( detailItem
), то " Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
"
- В іншому випадку поверніться, "
NO
щоб дозволити контролеру розділеного вигляду спробувати включити вміст вторинного контролера перегляду в згорнутий інтерфейс"
Результати наступні для iPhone в портреті (починаючи з портрета або повертаючись до портрета - або більш точно компактного розміру):
- Якщо ваш погляд правильний
- і має модель, покажіть контролер перегляду деталей
- але немає моделі, покажіть контролер головного перегляду
- Якщо ваш погляд невірний
- показати контролер головного перегляду
Ясно, як грязь.
UISplitViewController
і завжди повертаюсяYES
з цього методу, а потім просто змінюю клас розділеного перегляду на Storyboard, як завжди хочу показати майстра на iPhone в портреті. :)