#iphone #ios4 #ipad
#iPhone #ios4 #iPad
Вопрос:
Я пытался добавить / реализовать этот пример в мои существующие тесты приложений с разделенным просмотром.
Я думаю, что использовать концепцию замены подробного просмотра или правильного просмотра, иначе мое приложение будет другим. Именно это различие является причиной моих проблем.
У меня есть rootviewcontroller или вид слева, и при выборе чего-либо здесь в этот вид добавляется новый вид. При выборе чего-либо в этом «расширенном представлении» я хочу изменить детальный вид или вид справа. В этом отличие от примера apple, где в rootview нет принудительного просмотра и, следовательно, ссылки не нарушаются.
Ниже приведен мой код изменения — инициализируется новый просмотр DVCases, но загрузка не происходит.
Проблемы связаны с проблемами учащихся, связанными с моими классами.
-
Приведенный ниже код находится в моем коде реализации RootViewController, но моя ссылка на splitviewcontroller не работает, если загружено новое представление.
-
Второе я.navigationcontroller неверен, потому что я отправил второе представление в rootviewcontroller.
Чтобы централизовать и упростить код, который я сделал, используя делегат принудительного просмотра в событии didselect, я вызываю метод, найденный в rootviewcontroller, передавая индекс в качестве параметра. Код для моего пользовательского метода содержит то, что приведено ниже.
Итак, мой вопрос в том, как мне это сделать в моей ситуации, когда я перенес другие представления в rootview или левую сторону. Похоже, что после нажатия view ссылка на splitviewcontroller исчезла, и self.navigationcontroller также исчез / или неправильный.
UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
if (value == 0) {
DVCases *newDetailViewController = [[DVCases alloc] initWithNibName:@"DVCases" bundle:nil];
detailViewController = newDetailViewController;
}
// Update the split view controller's view controllers array.
NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
splitViewController.viewControllers = viewControllers;
[viewControllers release];
// Dismiss the popover if it's present.
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
// Configure the new view controller's popover button (after the view has been displayed and its toolbar/navigation bar has been created).
if (rootPopoverButtonItem != nil) {
[detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];
}
[detailViewController release];
Я был бы признателен за любые советы или помощь, которые у вас могут быть.
Комментарии:
1. в первом пункте вы упоминаете, что используете тот же код, что и в примере Apple, и у вас проблемы со ссылками, я прав? и во-вторых, вы говорите, что добавили вложенный просмотр, а не вставили его, это то, что вы хотите сказать?
2. Прошу прощения за то, что не задал четкого вопроса. Я надеюсь, что теперь моя терминология стала лучше.
Ответ №1:
Инициализация любого viewcontroller
класса не означает, что он вызовет viewDidLoad
метод.
viewDidLoad
метод будет вызываться только при загрузке представления этого viewController
. Обычно мы делаем это либо следующими методами.
1. Pushing it on navigation stack.
2. Presenting it using modal transition.
3. Adding it on some other view using [someView addSubView:controller.view];
4. Selecting any tabBar item for the first time Or tapping tabBar Item twice.
there may be some other scenarios.
Но прямо сейчас в вашем коде я не вижу ни одного из этих элементов.
Инициализация означает, что вы вызываете прямой метод для инициализации (вызывая его конструктор), как здесь, в приведенном выше коде, который initWithNibName
будет вызывать этот метод, а DVClass
не какой-либо другой (до тех пор, пока этот метод не вызывал другие методы внутри него).
Спасибо
Комментарии:
1. Я согласен — но в этом случае метод, рекомендованный Apple, заключается в замене правостороннего контроллера просмотра из массива контроллеров UISplitViewController.
2. но в этом случае первый и второй контроллеры просмотра сами по себе не имеют никакого метода viewDidLoad. Но у них есть реализация метода showRootPopoverButtonItem.
3. Да, они есть, и они работают. Я обнаружил проблемы и теперь изменил вопрос. Я думаю, что это предпочтительный способ на этом форуме.
Ответ №2:
Поскольку я учусь правильно кодировать, мои проблемы сосредоточены вокруг этого.
Приведенный выше код идеален, если вы вызываете его, используя тот же экземпляр. Я не был. Таким образом, это не работало.
В итоге я сделал свой RootViewController делегатом для метода, который имеет приведенный выше код. Таким образом, когда в другом представлении — это представление может вызывать этот метод, и надлежащий или реальный экземпляр RootViewController реализует его.