Замена контроллера подробного представления не вызывает viewWillAppear - PullRequest
1 голос
/ 30 июня 2010

Я портирую приложение для iPhone на iPad.На iPhone я выбираю строку в таблице, и после этого следующий контроллер представления перемещается в верхнюю часть навигационного контроллера (теперь навигация выполняется в левой части контроллера разделенного представления).Для iPad я изменил код следующим образом:

if (deviceIsIPad())
{
    UISplitViewController *svc = (UISplitViewController *)[self findNearestParentOfClass:[UISplitViewController class]];
    svc.viewControllers = [NSArray arrayWithObjects:[svc.viewControllers objectAtIndex:0],
                                                     nextViewController,
                                                     nil];
}
else
    [self.navigationController pushViewController:nextViewController animated:YES];

Нет проблем с кодом iPhone (когда контроллер передается на контроллер навигации), но на iPad viewWillAppear: не вызывается (однако вызывается viewDidLoad),в то время как у меня есть причина выполнить некоторые настройки прямо в viewWillAppear :.Почему это не называется, и что я должен сделать, чтобы заставить его называться?

Большое спасибо заранее!

1 Ответ

0 голосов
/ 30 июня 2010

Не совсем уверен, что вы пытаетесь сделать здесь, но простая инициализация контроллера splitview и добавление к нему контроллеров не заставляет отображаться представления. Вы должны добавить виды контроллера splitview в окно.

Вот код из делегата приложения шаблона Xcode Splitview applicationDidFinishLaunching:

splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = [NSArray arrayWithObjects:navigationController, detailViewController, nil];
splitViewController.delegate = detailViewController;

NSLog(@"master=%@",splitViewController.viewControllers);
// Add the split view controller's view to the window and display.
[window addSubview:splitViewController.view];
[window makeKeyAndVisible];

Представления в контроллере навигации появляются, поскольку он уже прикреплен к окну и отображает вид одного из его контролируемых контроллеров.

Edit:

Из комментариев:

Весь код инициализации, который вы цитируете здесь уже выполнено. Теперь давайте предположим, что у одного есть стол слева контроллер, затем он выбирает другой ряд и хочу заменить прямо контроллер с другим. splitViewController.view добавлен в окно фдкуфвн, потому что какой-то графический интерфейс элементы, инициализированные в viewDidLoad, правильно представлены на виде

Звучит так, как будто ваша проблема возникает из-за того, что детальное (правое) представление контроллера splitview всегда видно, т. Е. Оно появляется только при вызове viewWillAppear, один раз сразу после первой загрузки. Нет точки, в которой сторона детали не имеет представлений. Я не уверен, что будет делать полностью замена viewControllers из splitview.

Если вы хотите изменить подробный вид на лету. Вам нужно поместить контроллер навигации в правую сторону, а затем нажать и выдвинуть контроллеры представления в этой навигационной панели в ответ на события в контроллере правой стороны.

Посмотрите, как работает приложение iPad iPod. У вас есть вид слева на плейлист, а справа - список всех песен в плейлисте. Выбор песни выдвигает подробный вид песни поверх списка песен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...