使用UIPopOver导航不同的视图

时间:2011-04-13 17:26:05

标签: objective-c cocoa-touch ipad uipopover

所以我有一个名为“TopNewsViewController”的ViewController类。它从RootViewController被推送到NavigationController堆栈。

在TopNewsViewController中,我点击一个按钮即可显示弹出窗口。它显示PopOver的表格视图。

现在,在PopOver中的方法tableView:didSelectRowAtIndexPath中,我希望它修改TopNewsViewController的一些属性并将其重新推送到导航堆栈。我正在实现如下方法:

TopNewsViewController *topNewsViewController = [[[TopNewsViewController alloc] initWithNibName:@"TopNewsViewController" bundle:nil] autorelease];

NSString *feedStr = [rootViewController.feeds objectAtIndex:rowNumber];
[rootViewController release];
NSArray *thisFeed = [NSArray arrayWithObjects:feedStr, nil];
topNewsViewController.feeds = thisFeed;
topNewsViewController.pageTitle = [categories objectAtIndex:rowNumber];
[self.navigationController pushViewController:topNewsViewController animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];

我意识到这不起作用,因为我使用“self.navigationController”,当PopOver不是ViewController时,而是一个UITableViewController。我尝试做“topNewsViewController.navigationController”,但它没有用。

任何人对如何实施都有任何建议?非常感谢帮助/建议!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,我认为最好的办法是在你的popover的UITableViewController中实现一个委托,这样当选择一个记录时,它会调用委托方法将选择权交还给你的RootViewController。然后,RootViewController将处理推送和弹出您想要使用的任何新TopNewsViewControllers。您在此处创建的新TopNewsViewController默认情况下没有导航控制器,这就是它无法工作的原因。

因此,你的根视图控制器成为你的popover视图控制器的委托...当选择一行时,它会显示“popOver:didSelectRow:”然后RootViewController解除popover并“做正确的事”(tm)