О людино, це викликало у мене головний біль протягом декількох днів і не міг зрозуміти, як це зробити. Найгірше було те, що створення нового проекту 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 в портреті. :)