1

我正在制作一个地图中有多个引脚的应用程序。(在 iOS 应用程序中使用 xcode)当我点击图钉时,标注会出现一个披露按钮,按下该按钮会弹出一个新的视图控制器(我将其用作详细视图……这是正确的吗?)

在查看新的视图控制器后,我目前在返回原始视图控制器时遇到问题。

我应该如何继续返回地图视图?

我试过 -(IBAction)Back; 命令并将其链接到新视图控制器上的按钮,但是当我在模拟器中单击它时,出现黑屏并且输出中没有显示错误..

任何帮助,将不胜感激!

我使用以下内容查看新的视图控制器:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {


    if ([view.annotation.title isEqualToString:@"..."]) {

            ...Controller *sampleView = [[...Controller alloc] init];
            [self presentModalViewController:sampleView animated:YES];

    }

    if ([view.annotation.title isEqualToString:@"..."]){
       ...ViewController *sampleView = [[...ViewController alloc] init];
        [self presentModalViewController:sampleView animated:YES];
    }
}

编辑1:这是我做出改变后得到的错误代码..

2013-06-30 18:02:30.386 lam[15156:13d03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "...Controller" nib but the view outlet was not set.'
*** First throw call stack:
(0x1e2d012 0x126ae7e 0x1e2cdeb 0xf88c8 0xf8dc8 0xf8ff8 0xf9232 0x104c25 0x3043a3 0x101ee3 0x102167 0xfee0071 0x374c 0x10deb1a 0x10ea28e 0x82f617f 0x127e705 0x1b2c0 0x1b258 0xdc021 0xdc57f 0xdb6e8 0x4acef 0x4af02 0x28d4a 0x1a698 0x1d88df9 0x1db0f3f 0x1db096f 0x1dd3734 0x1dd2f44 0x1dd2e1b 0x1d877e3 0x1d87668 0x17ffc 0x2842 0x2775)
libc++abi.dylib: terminate called throwing an exception
4

1 回答 1

0

你是如何calloutAccessoryControlTapped“提出”这个新的视图控制器的?

如果您使用了模态转换(例如模态转presentViewController场),那么您将使用dismissViewControllerAnimated. 如果您使用了 deprecated presentModalViewController,那么您将使用dismissModalViewControllerAnimated,但话又说回来,您可能不应该使用 deprecated 方法,除非您需要支持 5.0 之前的 iOS 版本。请改用presentViewControllerdismissViewControllerAnimated演绎版。无论如何,您最终可能会使用以下IBAction方法:

- (IBAction)handleDoneButton:(id)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

如果您使用推送转换(例如pushViewController或推送转场),那么您通常只需使用内置的“后退”按钮,但如果您需要自己的按钮来弹出此控制器,您将使用IBActionwith popViewControllerAnimated。例如:

- (IBAction)handleDoneButton:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES completion:nil];
}

或者,如果您calloutAccessoryControlTapped使用 a performSegueWithIdentifier,那么您可以使用上述技术,或者在 iOS 6 及更高版本中,您可以在具有地图的视图控制器中定义以下展开转场:

- (IBAction)backToMap:(UIStoryboardSegue *)segue
{
    // do whatever you want
}

然后你可以control- 从按钮拖动到场景下方酒吧的出口处,你应该会看到这个backToMapunwind segue。


关于您的错误,这意味着您的 NIB 的根视图未设置。选择视图并查看其出口。您应该会看到如下内容:

如果视图设置正确

如果不是,(a)确保将“文件所有者”设置为视图控制器类;(b) 右键单击​​“文件的所有者”;(c) 从弹出视图中“视图”旁边的“o”拖动到实际视图:

在此处输入图像描述

此外,在创建视图控制器时,您可能需要指定要使用的 NIB:

ViewController *controller;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    controller = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
    controller = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
于 2013-06-30T13:23:43.720 回答