2010-11-04 189 views
1

我有一个导航控制器和位于称为切换的导航栏右侧的按钮。当我按下按钮时,我基本上都想在表格视图和地图视图之间切换。我怎样才能做到这一点?使用UINavigationController切换视图

这可以通过推动和弹出导航堆栈来回吗?

回答

1

好的...你可以使用navigationControllers等来完成。

你只需要做出一个方法都viewControllers,并在每个viewDidLoad中把这个:

[self.navigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Toggle" style:UIBarButtonItemStylePlain target:self action:@selector(toggleView:)] autorelease]]; 

那么你要在你的第一个视图这种方法(可以说其列表视图):

-(void)toggleView:(id)selector { 
    MapViewController *mapViewController = [[MapViewController alloc] initWithNibName:nil bundle:nil]; 
    [self.navigationController pushViewController:mapViewController animated:NO]; // this pushes a view onto the stack 
    /* or you could use this: 
    [self presentModalViewController:mapViewController animated:YES]; 
    // which slides the view up over the current view */ 
    [mapViewController release]; 
} 

那么的MapView:

- (void)toggleView:(id)selector { 
     [self.navigationController popViewControllerAnimated:YES]; // this pops back a view 
     /* or you went for the second option above: 
     [self dismissModalViewControllerAnimated:YES]; 
     // which slides the view back down. */ 
} 
+0

所以在每个viewDid加载我需要做self.navigationItem setRightBarButtonItem ......? – aherlambang 2010-11-04 21:51:05

+0

这个画的一面是我有一个后退按钮,这很尴尬 – aherlambang 2010-11-04 21:52:05

+0

是的。 :p(和15个字符) – 2010-11-04 21:52:41

1

我在我的一个应用中做了同样的事情,除了分段控制。就我而言,地图和表格逻辑上处于同一层级,因此使用导航控制器没有任何意义。

基本上,当用户在应用程序中的那一点时,我实例化了表视图和地图视图。当我收到一个按钮按下事件时,我只是将一个视图移到另一个视图的前面(bringSubviewToFront)。来自这两个视图的事件(地图和表格)将下一个视图推送到控制器上。为确保导航控制器上的后退按钮有意义,我只需在RootViewController中切换navigationItem标题。所以,如果他们想切换地图:

[self.view bringSubviewToFront:self.map_view.view]; 
    UIBarButtonItem *backButton = 
    [[UIBarButtonItem alloc] initWithTitle:@"Map" style: 
    UIBarButtonItemStylePlain target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 

等等

因为我遇到了一些内存的问题,我也有一些代码,将垃圾地图,如果重置后退按钮标题我收到内存警告,切换按钮委托方法将检查在洗牌视图之前是否需要重新实例化映射。每次切换时,我都会比实例化并释放地图更好。通常保留地图的流体性能要好得多,它允许用户的地图状态持续(只要我们没有达到内存限制)。

希望这会有所帮助。

+0

我喜欢你更好的解决方案,但我真的不曲ite得到它...为什么你有一个后退按钮,如果你只是在另一个顶部显示一个视图? – aherlambang 2010-11-04 21:53:52

+0

当他们点击表格行或地图注释并传递给记录视图时,我会显示一个后退按钮。当他们从那里回来时,他们会回到地图或桌子上,无论他们最后使用哪一个。我应用程序中的后退按钮指示他们应该看到哪些人。 – jmans 2010-11-05 13:45:03

+0

哦,好吧,这是有道理的,然后...是你的应用程序商店? – aherlambang 2010-11-05 14:36:35