2010-08-17 79 views
0

所以我想简单的横向到表格视图中的一个新的水平做这个:的TableView帮助推自定义视图

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

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

OK,我要多放一些源在这里尝试和帮助.​​.....

里面的主视图控制器我有这样的代码从一个按钮,使酥料饼:

// 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类中首次发布的代码。这些帮助有用?

+1

帮助我们,并在视图中试图推动在ViewDidAppear方法中添加NSLog语句并查看它是否到达那里。也做一个NSLog的indexPath.row,让我们看看是什么。只是抛出它的情况下,导致您的表中的第一行是不是在indexpath.row = 1,但在indexpath.row = 0 – 2010-08-17 19:51:39

+0

好吧,索引路径是好的。这不是问题。我正在浏览文件,至于viewDidAppear,你的意思是看法会出现吗?因为它确实到达那里,但我没有看到确实出现过的方法...... – gabaum10 2010-08-18 14:55:34

+0

好吧,我已经取得了一些突破。我得到它推动新的观点。显然问题在于我的filtersController类不知道mainView类中的导航控制器。现在我只需要让它显示正确的信息。我会及时向大家发布。 – gabaum10 2010-08-18 15:37:06

回答

0

如果你只是显示你的UITableViewControllerUIPopoverController之内,将不会自动为你创建。你可能需要修改你创建UIPopoverController的代码,如下所示:

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

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

+0

那么我正在创建一个导航控制器,这就是为什么这是如此令人困惑。遵循我所见到的所有逻辑,我所拥有的应该起作用。我真的很茫然...... – gabaum10 2010-08-18 14:49:52

0

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

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

应该

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

是的,我发布这个后,我确实发现了这一点。这不是问题,你有什么其他的想法吗? – gabaum10 2010-08-17 19:25:44

+0

@ gabaum10:检查'self.navigationController'不是零,并且'aFiltersCont'不是零。 – jtbandes 2010-08-17 20:00:22

+0

他们不是零。 – gabaum10 2010-08-18 15:21:11

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]; 
    } 
} 
+0

这一行在这一点上并不重要。一旦观点推进,这将会产生更大的影响。这正是我现在所拥有的。 – gabaum10 2010-08-17 20:03:35