TTNavigator没有推进导航堆栈

时间:2012-01-07 16:30:25

标签: ios three20

我正在使用Three20框架中的TTTableView类来创建具有样式内容的表格视图单元格,包括带URL的HTML。细胞外观和工作几乎都很好。获取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;

网址在单元格中突出显示,点击一个会触发此方法:

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

}

TTWebController似乎没有被推到导航堆栈上,它只是“显示”而没有后退箭头。有什么想法吗?

使用我的解决方案进行更新 在玩了一些之后我认为问题是我正在尝试使用Three20 URL导航方法来推动新的视图控制器,同时使用常规的iOS UINavigationController。显示TTWeb控制器的点是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 :(得分:0)

这可能会发生,具体取决于您呈现包含tableView的viewController的方式。它将viewController推送到UINavigationController或按url调用(在这种情况下,Three20会自动为你创建一个navigationController)。

您需要确保可以推送使用WebController的navigationController存在。