从表格选择中加载另一个视图而不会丢失导航(返回)

时间:2011-12-14 08:14:41

标签: objective-c ios xcode

我有一个通过UITabBar控制的应用程序。在标签栏的其中一个部分中,我有一个导航表。它从我从其中一本书中做的一个例子可以正常工作,但是当用户选择一行并且我希望用户能够轻松返回时,我希望能够使用另一个视图控制器(也称为另一个xib文件)。我意识到这与pushViewControllers有关,但我被卡住了。这是我认为问题所在。我的代码在底部。如果你注意到,我注释掉了

       // [self presentModalViewController:flowerDetailViewController animated:YES]; 

虽然这确实把我带到了我的flowerDetailViewController XIB文件,但我失去了导航功能(返回)。如果有人有任何想法或建议,我们将不胜感激。

谢谢

     -(void)tableView:(UITableView *)tableView 
     didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

FlowerDetailViewController *flowerDetailViewController = 
[[FlowerDetailViewController alloc] initWithNibName:
 @"FlowerDetailViewController" bundle:nil];
/*flowerDetailViewController.detailURL=
[[NSURL alloc] initWithString: 
 [[[flowerData objectAtIndex:indexPath.section] objectAtIndex: 
   indexPath.row] objectForKey:@"url"]];*/
flowerDetailViewController.title=
[[[flowerData objectAtIndex:indexPath.section] objectAtIndex: 
  indexPath.row] objectForKey:@"name"];
//[self presentModalViewController:flowerDetailViewController animated:YES];

[self.navigationController pushViewController:
 flowerDetailViewController animated:YES];
[flowerDetailViewController release];
  }

1 个答案:

答案 0 :(得分:1)

连续在同一视图上执行这两种方法没有任何意义。

[self presentModalViewController:flowerDetailViewController animated:YES];

..

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

因为从用户体验的角度来看,它们会给出截然不同的结果。

第一个提供了一个视图 modaly。 Modaly意味着,他的应用程序将视图调到顶部(想象一个Z轴,当你拿着手机,它是从手机到你的一条线,在它上方意味着离你更近),并且用户只是因为它在顶部而被困在该视图中,他/她不能触摸应用程序中的任何其他内容,除非他解决视图中显示的选项和视图消失了。

第二个方法是将视图推送到视图堆栈,这些视图都属于导航控制器。导航控制器将视图推到屏幕上,就像你将一叠卡片放在桌子上,卡片1,放在卡片2上,放在卡片上......等等卡片N.但你还是有触摸的能力导航控制器周围的其他选项。要返回到卡1,您需要移除卡顶部的卡(视图),以便移除顶部视图,导航控制器自动提供后退按钮。

只有你能说出来,这两个中的哪一个在应用程序UI和设计方面都很方便。