Iphone 使用UINavigationController切换视图
我有一个导航控制器和一个位于导航栏右侧的按钮,称为切换。当我按下按钮时,我基本上想在表视图和地图视图之间切换。我该怎么做Iphone 使用UINavigationController切换视图,iphone,objective-c,Iphone,Objective C,我有一个导航控制器和一个位于导航栏右侧的按钮,称为切换。当我按下按钮时,我基本上想在表视图和地图视图之间切换。我该怎么做 这可以通过来回推和弹出导航堆栈来实现吗 我正在我的一个应用程序中做同样的事情,除了使用分段控件。在我的例子中,地图和表在逻辑上处于相同的层次结构级别,因此使用导航控制器没有意义 基本上,当用户在应用程序中的某个位置时,我实例化了表视图和地图视图。当我收到一个按钮按下事件时,我只是将一个视图移动到另一个视图的前面(将SubViewToFront)。来自这两个视图(映射和表)的事
这可以通过来回推和弹出导航堆栈来实现吗 我正在我的一个应用程序中做同样的事情,除了使用分段控件。在我的例子中,地图和表在逻辑上处于相同的层次结构级别,因此使用导航控制器没有意义 基本上,当用户在应用程序中的某个位置时,我实例化了表视图和地图视图。当我收到一个按钮按下事件时,我只是将一个视图移动到另一个视图的前面(将SubViewToFront)。来自这两个视图(映射和表)的事件将下一个视图推送到控制器上。为了确保导航控制器上的后退按钮有意义,我只需在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;
等等
因为我遇到了一些内存问题,所以我还有一些代码,如果我收到内存警告,它们将丢弃地图并重置后退按钮标题,而toggle button delegate方法将检查地图是否需要在混乱视图之前重新实例化。比起每次切换地图时都实例化和发布它,我更喜欢这个。通常,保留地图具有更流畅的性能,它允许用户的地图状态保持不变(只要我们没有达到内存限制)
希望这有帮助。好的。。。您可以使用NavigationController等来完成所需的操作 您只需在两个ViewController中创建一个方法,并在每个控件的viewDidLoad中放置以下内容:
[self.navigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Toggle" style:UIBarButtonItemStylePlain target:self action:@selector(toggleView:)] autorelease]];
然后,您希望在第一个视图中使用此方法(假设它是列表视图):
然后在地图视图中:
- (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. */
}
因此,在每个视图中,我需要进行self.navigationItem SetRightBarButtonim…?这的绘图面是我有一个后退按钮,这很尴尬那么有没有一个没有尴尬的解决方案?我更喜欢你的解决方案,但我真的不太明白…如果只是在另一个视图上显示一个视图,为什么要有一个后退按钮?当它们单击表行或地图注释并传递到记录视图时,我会显示一个后退按钮。当他们从那里回击时,他们将返回地图或表格,无论他们最后使用的是哪一个。“我的应用”中的“后退”按钮指示他们应该看到的内容。哦,好吧,这很有意义……你的应用是否在应用商店中?
- (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. */
}