Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用UINavigationController切换视图_Iphone_Objective C - Fatal编程技术网

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. */
}