TTNavigator не помещается в стек навигации - PullRequest
0 голосов
/ 07 января 2012

Я использую класс TTTableView из инфраструктуры Three20 для создания ячеек табличного представления со стилизованным содержимым, включая HTML с URL-адресами. Клетки выглядят и работают почти нормально. URL-адреса подобраны, и на один из приемов постукивают соответствующим методом делегата. Тем не менее, URL-адрес открыт в TTWebController, у TTWebController нет стрелки назад, чтобы выскочить представление стека навигации.

Вот мой код:

TTTableStyledTextItem *messageItem = [TTTableStyledTextItem itemWithText:[TTStyledText textFromXHTML:message lineBreaks:YES URLs:YES]];
messageItem.delegate = self;

TTListDataSource *dataSource = [[TTListDataSource alloc] init];
[dataSource.items addObject:messageItem];

TTNavigator* navigator = [TTNavigator navigator];
navigator.delegate = self;
navigator.window = [UIApplication sharedApplication].delegate.window;

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


self.tableView.dataSource = dataSource;
self.tableView.delegate = self;

URL-адреса подсвечиваются в ячейках, и при нажатии одной из них запускается следующий метод:

- (BOOL)navigator: (TTBaseNavigator *)navigator shouldOpenURL:(NSURL *) URL {
return YES;

}

TTWebController, похоже, не помещается в стек навигации, он просто «показан» без стрелки назад. Есть мысли?

Обновление с моим решением Поиграв еще немного, я думаю, что проблема в том, что я пытаюсь использовать метод URL-навигации Three20, чтобы выдвинуть новый контроллер представления, в то же время используя обычный iOS UINavigationController. Точка, в которой показывается TTWebcontroller, является первым контроллером представления в стеке навигации Three20, и, как таковой, является корневым контроллером представления и поэтому не имеет никакого понятия «возвращаться» к предыдущему представлению.

Вот моя работа:

- (BOOL)navigator: (TTBaseNavigator *)navigator shouldOpenURL:(NSURL *) URL {
    // setup a webcontroller with the URL and push it
    TTWebController *webController = [[TTWebController alloc] init];
    [webController openURL:URL];
    [self.navigationController pushViewController:webController animated:YES];
    [webController release];

    // dont navigate with TTBaseNavigator
    // this does not use the regular UINavigation stack and
    // ... the new view becomes rootview and has no back button
    return NO;
}

Надеюсь, это кому-нибудь поможет.

1 Ответ

0 голосов
/ 08 января 2012

Это может произойти в зависимости от того, как вы представили viewController, содержащий tableView.Если viewController помещается в UINavigationController или вызывается для каждого URL-адреса (в этом случае Three20 автоматически создаст для вас навигационный контроллер).

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

...