Навигация Three20 из TTTableview в TTPhotoView

#iphone #ios #three20

#iPhone #iOS #three20

Вопрос:

У меня есть вопрос относительно навигации контроллера просмотра в Three20. У меня есть TTTableView «Галерея» и TTPhotoViewController «Фотографии». Когда я касаюсь одного элемента табличного представления, приложение переходит к просмотру фотографий.

Вот код, который я использовал:

В AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions методе,

 TTNavigator *navigator = [TTNavigator navigator];
navigator.supportsShakeToReload = NO;
navigator.persistenceMode = TTNavigatorPersistenceModeAll;


TTURLMap *map = navigator.URLMap;
[map from:@"*" toViewController:[TTWebController class]];

[map from:@"tt://launcher" toSharedViewController:[LauncherViewController class]];

[map from:@"tt://photos" parent:@"tt://gallery" toViewController:[PhotoViewController class] selector:nil transition:0];
[map from:@"tt://gallery" parent:@"tt://launcher" toViewController:[GalleryViewController class] selector:nil transition:0];
  

GalleryViewController — это контроллер просмотра таблиц

 @interface GalleryViewController : TTTableViewController
@end
  

В GalleryViewController.m

 -(void)createModel
{
    self.dataSource = [TTListDataSource dataSourceWithObjects:
                   [TTTableSubtitleItem itemWithText:@"Album One" subtitle:nil imageURL:@"http://example.image.url" URL:@"tt://photos"]
                   ,
                   [TTTableSubtitleItem itemWithText:@"Album Two" subtitle:nil imageURL:@"http://example.image.url2" URL:@"tt://photos"],
                   nil];
}
  

Я скопировал этот код из TTCatalog.xcodeproj примера проекта. Но я не могу перейти к просмотру фотографий и получил следующее из консоли, когда я пытаюсь перейти к просмотру фотографий из элемента табличного представления.

 nested push animation can result in corrupted navigation bar 
Finishing up a navigation transition in an Navigation Bar subview tree might get corrupted.
Unbalanced calls to begin/end appearance transitions for <PhotoViewController: 0x6c5d8f0>.
  

Поэтому я не знаю, как решить этот вопрос. Спасибо!

———Обновить:———-

Я понял, как решить проблему. В AppDelegate методах используйте

 [map from:@"tt://launcher" toSharedViewController:[LauncherViewController class]];

[map from:@"tt://photos" parent:@"tt://gallery" toSharedViewController:[PhotoViewController class] selector:nil];
[map from:@"tt://gallery" parent:@"tt://launcher" toSharedViewController:[GalleryViewController class] selector:nil];
  

вместо [map from: parent: toViewController: selector: transition:]

Но здесь возникает другой вопрос, может ли кто-нибудь объяснить, почему toSharedViewController может решить эту проблему?

Ответ №1:

Для предполагаемого использования вам даже не нужно использовать - from:parent:toSharedViewController: , просто попробуйте - from:toViewController: . Причина этого в том, что ваш путь к PhotoViewController прямому (Панель запуска -> Галерея -> Фото).

В случае, если вы хотите перейти к PhotoViewController прямому из LauncherViewController , имея GalleryViewController промежуточное звено (т. Е. Имея кнопку возврата в левом верхнем PhotoViewController углу указателя на GalleryViewController ), вы хотите позвонить - from:parent:toSharedViewController: .

В настоящее время вы вызываете - from:parent:toSharedViewController: , который будет повторно использовать общий контроллер, таким образом, не генерируя «вложенные push»-предупреждения:

Контроллеры, созданные в режиме «поделиться», означают, что они будут созданы один раз и использоваться повторно, пока не будут уничтожены.