无法从MapKitView到Controller

时间:2014-10-05 07:42:58

标签: ios objective-c iphone swift mapkit

我想在地图视图和控制器之间创建一个segue。但是,按住Ctrl键并尝试在地图视图和控制器之间建立连接并不起作用。我见过有人说你可以使用performSegueWithIdentifier以编程方式调用它,但是我甚至无法创建一个segue来为它分配一个标识符,以便稍后我可以调用它。如果没有任何效果,我只是创建一个隐藏按钮,制作一个segue并在地图视图点击上调用segue。但是如果有一种非黑客的做法,我想知道。

1 个答案:

答案 0 :(得分:1)

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

让ctrl +从第一个VC拖动到第二个VC。确保缩小并且您不是选择按钮而是选择整个VC。这样我们就可以创建手动segue。为标识符指定一个合适的名称,因为我们需要稍后在代码中引用它。

enter image description here

现在让检查员设置如上所述的标识符。确保在两个VC之间选择圆形segue事物。 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可以实现segue。如果适用,请使用您喜欢的概念。有什么问题欢迎吗?

P.S performSegueWithIdentifier轮流调用-prepareSegue的实现。如果您没有实现此方法,则会调用UIViewControllers -prepareSegue。那是一些遗产。无论如何,希望它有所帮助。