2014-10-05 180 views
1

我想在地图视图和控制器之间创建一个segue。但是,按住Ctrl键并尝试在地图视图和控制器之间建立连接不起作用。我看到有人说你可以通过使用performSegueWithIdentifier以编程方式调用它,但我甚至不能创建一个segue来为它分配一个标识符,以便稍后可以调用它。如果什么都没有解决,我只是要创建一个隐藏的按钮,让一个segue,并调用在地图视图点击segue。但是,如果没有这种做法,我想知道。无法从MapKitView继续到控制器

+2

要创建一个可以以编程方式调用的segue,请按住Ctrl键并从视图控制器图标拖动到目标场景。你不能从MKMapView启动一个segue,因为它不支持动作 – Paulw11 2014-10-05 07:46:02

+0

我要在这里讨论主题。为了模拟点击动作,我应该为它创建一个手势识别器吗? – Gasim 2014-10-05 07:50:14

+1

通常情况下,如果您使用轻击手势识别器,但是您可以尝试它,那么当有人点击某个注释时,您会触发一个segue - 我认为会有错误触发的风险。 – Paulw11 2014-10-05 07:51:34

回答

1

首先了解您需要什么样的细节。可能你想用后退按钮回到地图。简单的方法是将所有VC嵌入到导航控制器中。我们最后会这样做。

让ctrl +从第一个VC拖到第二个。确保你缩小了,你不是选择了按钮,而是选择了整个VC。这样我们就创建了手动节点。为标识符提供一个合适的名称,因为我们需要稍后在代码中引用它。

enter image description here

现在到了检查器中设置所述标识符如上所述。确保你选择了两个VC之间的循环赛事。 enter image description here

然后进入第一个VC,ctrl +拖动放大后的地图来设置一个动作。对于我的情况,我有一个名为pop的按钮,我将通过Ctrl +将其拖动到实现文件来设置操作。

之后,我希望用户点击POP,在你的情况下,地图或标记,然后发射我们创建的segue。

的代码是:

- (IBAction)pop:(id)sender { 
    [self performSegueWithIdentifier:@"push" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([segue.identifier isEqualToString:@"push"]) { 
     //get the presenting vc here 
     id destionationVC=segue.destinationViewController; 

     //put some values to it 
     //destionationVC.value=2; //something; 

     //done 
    } 
} 

如果您现在尝试运行,你会崩溃。因为Push segues需要将UINavigationController作为它的根视图控制器。在这样做的时候,我们会自动获得一个后退按钮。所以选择第一个VC,在你的情况下,选择MaPVC并选择嵌入导航控制器。像这样, enter image description here

然后运行该应用程序,然后通过单击我的案例中的Pop来继续。不过,如果适用的话,请使用这个概念。有什么问题欢迎?

P.S performSegueWithIdentifier轮流调用您的-prepareSegue实现。如果你没有实现这个方法,它会调用UIViewControllers -prepareSegue。那是一些继承去那里。无论如何,希望它有帮助。

+1

我接受这个答案,因为我不知道可以创建手动游戏。但是,您无法将操作添加到MapView,因此它们不能有segag。于是,我创建了一个手动segue,然后在MapView中添加了一个UITapGestureRecognizer,并向识别器添加了一个动作来执行segue。 – Gasim 2014-10-06 11:25:36