TableView帮助推送自定义视图

时间:2010-08-17 19:10:54

标签: iphone objective-c ipad ios4

所以我试图通过这样做简单地遍历到表格视图的下一级:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 1) {
        FiltersController *aFiltersCont = [[FiltersController alloc] init];
        aFiltersCont.displayedFilters = [appDelegate.groupedBusiness allKeys];
        aFiltersCont.currentLevel = self.currentLevel + 1;
        [self.navigationController pushViewController:self animated:YES];
    }
}

有什么理由说这不会推动控制器?之前我遇到过类似的问题,但是通过模态显示视图解决了这个问题。但是,这一次,这是一个弹出窗口,需要滑动到该弹出框内的下一个屏幕。有任何想法吗?提前谢谢。

好的我打算在这里添加更多资源来尝试帮助...

在主视图控制器中,我有这个代码从按钮进行弹出:

   // Create and configure the filters controller.
FiltersController *aFiltersController = [[FiltersController alloc] initWithStyle:UITableViewStylePlain];
 self.filtersController = aFiltersController;
filtersController.appDelegate = self.appDelegate;



UINavigationController *filtersNavController = [[UINavigationController alloc] initWithRootViewController:filtersController];


UIPopoverController *filtersPopover = [[UIPopoverController alloc]     initWithContentViewController:filtersNavController];
self.filtersPopoverController = filtersPopover;
filtersPopoverController.delegate = self;

然后我有我在filtersController类中首次发布的代码。这些帮助有用?

4 个答案:

答案 0 :(得分:1)

[self.navigationController pushViewController:self animated:YES];

应该是

[self.navigationController pushViewController:aFiltersCont animated:YES];

答案 1 :(得分:0)

您正在推送self,这是对当前视图控制器的引用。如果aFiltersCont是您要尝试钻取的viewController,则应该使用push将行更改为以下内容。

[self.navigationController pushViewController:aFiltersCont animated:YES]; 

答案 2 :(得分:0)

您可能会对索引感到困惑。第一个索引是0而不是1,所以也许你想要indexPath.row == 0

此外,您应该在返回之前释放aFiltersCont(每次运行此方法时,您都会泄漏FiltersController及其拥有的任何内容。

也许这个?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
        FiltersController *aFiltersCont = [[[FiltersController alloc] init] autorelease];
        aFiltersCont.displayedFilters = [appDelegate.groupedBusiness allKeys];
        aFiltersCont.currentLevel = self.currentLevel + 1;
        [self.navigationController pushViewController:aFiltersCont animated:YES];
    }
}

答案 3 :(得分:0)

如果您只是在UITableViewController内显示UIPopoverController的次级,则不会自动为您创建UINavigationController。您可能需要使用以下内容修改创建UIPopoverController的代码:

MyTableViewController *table = [[[MYTableViewController alloc] init] autorelease];
UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:table] autorelease];
myPopover = [[UIPopoverController alloc] initWithContentViewController:nav];

然后你应该能够在堆栈上推送和弹出导航控制器没问题。