#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»-предупреждения:
Контроллеры, созданные в режиме «поделиться», означают, что они будут созданы один раз и использоваться повторно, пока не будут уничтожены.