Я использую класс 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;
}
Надеюсь, это кому-нибудь поможет.