pushViewController не заставляет новый контроллер рисовать вид

Предисловие: я не использую файлы *.xib.

Я создаю экземпляр UINavigationController в классе, который эффективно служит моим «rootViewController». Этот «rootViewController» также имеет два члена UITableViewController, которые отображаются в разных частях экрана iPad. Один из них установлен как корневой вид для навигационного контроллера. Назовем его tableViewControllerA.

Проблема в том, что когда я вызываю pushViewController для действительного UINavigationController, я не вижу никакого эффекта: [tableViewControllerA.navigationController pushViewController:tableViewControllerXanimated:YES];

Из сообщений, которые я искал сегодня, я понял, что этот метод push должен, в свою очередь, заставлять экран перерисовывать верхнюю часть стека controller.view. Это не то, что я вижу.

Казалось, что в моей реализации произошел разрыв, и пришло время сослаться на рабочий пример в моей среде (xcode 4.0). Предполагая, что готовые шаблоны обеспечат рабочую основу, я создал новые навигационные приложения. Я просто изменил didFinishLaunchingWithOptions: следующим образом.

    UIViewController *view1 = [[UIViewController alloc] init];
    UIViewController *view2 = [[UIViewController alloc] init];

    view1.title = @"view1";
    view2.title = @"view2";

    [self.navigationController pushViewController:view1 animated:YES];
    [self.navigationController pushViewController:view2 animated:YES];

    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:view1];

    [view1 release];
    [view2 release];

Я нашел похожие результаты. Когда я запускаю симулятор, заголовок экрана читает заголовок того, на что указывает self.window.rootViewController. С исходным кодом заголовок результирующего верхнего экрана читается как «view1». Когда я initWithRootViewController:view2, на верхнем экране отображается «view2».

Так что, пожалуйста, скажи мне, что я глупый, потому что xyz... Спасибо.


person stephen    schedule 03.10.2011    source источник
comment
Код пожалуйста! Мне нужно, как вы инициируете navigationController и как вы продвигаете свое представление.   -  person CodaFi    schedule 03.10.2011
comment
Извините. Я здесь новенький. Я не хотел подчиняться, когда я это сделал. Смотрите исправленное сообщение.   -  person stephen    schedule 03.10.2011


Ответы (2)


Вот некоторые ссылки и предложения:

Простой учебник для навигационного приложения:

http://humblecoder.blogspot.com/2009/04/iphone-tutorial-navigation-controller.html

Вот еще один, чтобы создать пошаговый контроллер навигации и добавить представления:

http://www.icodblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/

а здесь немного продвинулись вперед с помощью контроллера панели навигации + вкладок: //developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CombiningToolbarandNavigationControllers/CombiningToolbarandNavigationControllers.html

person UPT    schedule 03.10.2011
comment
все становится лучше, когда я вызываю [window addSubview:[navigationController view]]; Я хотел бы избежать этого, если это возможно. Вы не знаете, есть ли альтернатива? Или, я думаю, лучше спросить, что делает addSubview, что заставляет отрисовываться вид сверху вместо корневого вида (с точки зрения навигационных контроллеров)? - person stephen; 03.10.2011
comment
в окне вы можете только добавить любое подпредставление, а затем после этого вы получите полный контроль над ним. Если вы не знаете, то позвольте мне немного осветить это: Window — это своего рода контейнер, в который вы помещаете некоторые представления (добавляете подпредставление) и используете его для своего собственного внешнего вида приложения. Теперь эти представления могут быть простыми UIView, представлением NavigationController, представлением TabBarController и т. д. Теперь, когда вы поместили одно представление в контейнер, теперь у вас есть добавленное представление (навигационный контроллер в вашем случае), так что продолжайте и используйте добавленное представление. - person UPT; 03.10.2011
comment
это значит, что вы можете поместить только одно представление в контейнер через addSubview? - person stephen; 03.10.2011
comment
Я хочу спросить, есть ли другая альтернатива addSubview для достижения правильного функционального эффекта навигационного контроллера? Спасибо. - person stephen; 03.10.2011
comment
что вы подразумеваете под правильным функционалом? Вы прошли по ссылке и создали приложение? Это полностью функциональные примеры, красиво иллюстрированные, даже если вы загрузите код, вы сможете увидеть полностью функциональный код ... вы говорите, что вам нужен полный код в stackoverflow? давай... начни кодить вместо того, чтобы ожидать, что все будет сделано кем-то другим. - person UPT; 03.10.2011
comment
Я хочу поблагодарить вас за все ваши отзывы. Я реализовал код. Я только хочу знать, знаете ли вы об альтернативе использованию addSubview для достижения функционального навигационного контроллера (того, который вызывает перерисовку правильного представления при нажатии/выталкивании контроллеров). Еще раз спасибо. - person stephen; 04.10.2011

Не видя вашего кода, у меня есть 2 теории:

  1. Ваш синтаксис и вызовы неверны, когда вы делаете push. Используйте это в качестве модели:

    -(void)Examplemethod {
        AnotherClassViewController *viewController = [[[AnotherClassViewController alloc] initWithNibName:@"AnotherClassView" bundle:nil] autorelease];
    
        [self.navigationController pushViewController:viewController animated:YES];
    }
    
  2. Вы никогда не добавляете контроллер навигации в иерархию представлений, которая также никогда не добавляет представление. Взгляните на это.

person CodaFi    schedule 03.10.2011
comment
Есть ли причина, по которой я должен вызывать initWithNibName, когда я не использую перья? - person stephen; 03.10.2011