swift - 如何使 map 注释标注在 Swift 中打开一个新的 View Controller ?

标签 swift ios8 mkmapview mapkit callout

我正在尝试通过单击 map 标注来打开新 View 。
在 obj-C 中我的代码是这样的:

//Callout
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
if ([view.annotation isKindOfClass:[Annotation class]])
{
    Annotation *myAnn = (Annotation *)view.annotation;
    id vcToPush = nil;
    if ([[myAnn title] isEqualToString:@"View1"]){
        vcToPush = [[View1 alloc]init];
    }
    if ([[myAnn title] isEqualToString:@"View2"]){
        vcToPush = [[View2 alloc]init];
    }
    if ([[myAnn title] isEqualToString:@"View3"]){
        vcToPush = [[View3 alloc]init];
    }
    [self.navigationController pushViewController:vcToPush animated:YES];
 }
}

Swift 中的等价物是什么?
目前我已经知道了,但我卡住了:

//Pin type and callout
func mapView(_mapView: MKMapView!,
    viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {

        if annotation is MKUserLocation {
            //return nil so map view draws "blue dot" for standard user location
            return nil
        }

        let reuseId = "pin"

        var pinView = MapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
        var rightCalloutAccessoryView: UIView!
        if pinView == nil {
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            pinView!.canShowCallout = true
            pinView!.pinColor = .Red

            pinView!.rightCalloutAccessoryView = UIButton.buttonWithType(.DetailDisclosure) as UIButton
        }
        else {
            pinView!.annotation = annotation

        }
        return pinView
}

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {

}

我环顾四周,但我能找到的唯一答案并不能真正解决我的问题。
感谢您的帮助!

最佳答案

试试这个:

func mapView(MapView: MKMapView!, annotationView: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

    if control == annotationView.rightCalloutAccessoryView {
        performSegueWithIdentifier("NameOfYourSegue", sender: self)
        println("Going to the next VC!")
    }
}

关于swift - 如何使 map 注释标注在 Swift 中打开一个新的 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462814/

相关文章:

swift - Sprite 节点的起始位置

ios - MKMapView 每次加载它的 View 时都使用大量内存

objective-c - ios:MapView Pin 颜色注释不断变化;为什么?

xcode - 无法打开 Swift Guided Tour Playground

swift - 无法将 Alamofire 添加到 Swift 项目

ios - 如何访问下载的解压文件夹中的图像?

swift - 在 SWIFT 中使用 UIDatePicker(在 UIActionSheet 中)输入日期时 UITextField 中的日期格式

ios - 延长我的 Launchimage 以允许在主/初始应用程序屏幕上加载 map 图 block 是一种不好的做法吗?如果是,什么是正确的做法?

ios - 在 iOS 上学习编码——swift 与 Objective C 的困境

ios - fetchAssetCollectionsWithType 仅检索视频