从注释公开按钮打开新控制器后返回mapview

时间:2013-06-30 12:45:52

标签: viewcontroller ibaction

我正在创建一个地图中有多个引脚的应用程序。 (使用xcode for iOS apps)当我点击引脚时,标注会出现一个公开按钮,按下时会显示一个新的viewcontroller(我用作详细视图..这是正确的吗?)

我目前在查看新的viewcontroller后回到原始viewcontroller时遇到问题。

我该如何继续回到地图视图?

我试过 - (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

1 个答案:

答案 0 :(得分:0)

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

如果您使用了模态转换(例如presentViewController或模态segue),那么您将使用dismissViewControllerAnimated将其关闭。如果您使用了已弃用的presentModalViewController,那么您将使用dismissModalViewControllerAnimated,但是您可能不应该使用已弃用的方法,除非您需要支持5.0之前的iOS版本。请改用presentViewControllerdismissViewControllerAnimated再现。无论如何,您最终可能会使用IBAction方法:

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

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

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

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

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

然后你可以控制 -drag从按钮到场景下栏中的出口,你应该看到这个backToMap展开segue。


关于您的错误,这意味着您的NIB根视图未设置。选择视图并查看其插座。你应该看到类似的东西:

if view set up proper

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

enter image description here

此外,在创建视图控制器时,您可能希望指定要使用的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];
}