2012-01-07 2 views
0

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

Heres мой код:

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; 
} 

Надеется, что это помогает кто-то.

ответ

0

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

Вам нужно убедиться, что существует возможность перемещения навигационного контроллера с помощью WebController.

+0

Контроллер вида, содержащий представление таблицы, помещается в обычный UINavigationControler, и это самый верхний вид контроллера в примере кода, который я дал. Я бы подумал, что вызов WebController, вызванный вызовом, также будет нажат. Нужно ли конкретно указывать WebController или TTNavigator ссылку на используемый UINavigationControllr? – lukestringer90

+0

Нет, это обычно не так, но, возможно, стоит попробовать. Используйте 'setRootViewController:' на 'TTNavigator'. – tonklon

+0

Там до сих пор нет радости. – lukestringer90