当前位置: 首页 > 面试题库 >

Swift中的MapKit,第2部分

边意
2023-03-14
问题内容

我正在尝试在Swift中使用Map
Kit。我尝试在地图上显示该区域,一个图钉(MKPinAnnotationView)和当前位置。所有显示正常。我尝试添加“披露按钮”并拦截其点击。添加了“披露”按钮,但无法进行拦截窃听。

pinPressed具有方法的功能calloutAccessoryControlTapped不起作用。

这是一个示例代码:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

@IBOutlet weak var mainMapView: MKMapView!

var locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestAlwaysAuthorization()
    locationManager.startUpdatingLocation()

    var objectLatitude = 53.204526
    var objectLongitude = 50.111751

    var currentLatitude = 53.203715
    var currentLongitude =  50.160374

    var latDelta = 0.05
    var longDelta = 0.05

    var currentLocationSpan: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
    var currentLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude)
    var currentRegion: MKCoordinateRegion = MKCoordinateRegionMake(currentLocation, currentLocationSpan)
    self.mainMapView.setRegion(currentRegion, animated: true)

    var objectLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(objectLatitude, objectLongitude)
    var objectAnnotation = MKPointAnnotation()
    objectAnnotation.coordinate = objectLocation
    objectAnnotation.title = "St. George"s Church"
    objectAnnotation.subtitle = "Church of the Great Martyr St. George"
    self.mainMapView.addAnnotation(objectAnnotation)
}

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
        if pinView == nil {
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            pinView!.canShowCallout = true
            pinView!.animatesDrop = true
            pinView!.pinColor = .Purple
            pinView!.rightCalloutAccessoryView = UIButton.buttonWithType(.DetailDisclosure) as UIButton
        }
        else {
            pinView!.annotation = annotation
        }
        return pinView
}

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

    if control == annotationView.rightCalloutAccessoryView {
        println("Disclosure Pressed!")
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
}

问题答案:

calloutAccessoryControlTapped委托方法必须命名mapView(annotationView:calloutAccessoryControlTapped:)

您不能使用自己的名字,例如pinPressed(...)

这适用于任何委托方法,并由协议规定。

所以应该是:

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

    if control == annotationView.rightCalloutAccessoryView {
        println("Disclosure Pressed!")
    }
}


 类似资料:
  • 问题内容: 我有一个工作循环来为一些工作数据点设置标题和字幕元素的注释。我想要在相同的循环结构中执行的操作是将图钉颜色设置为“紫色”,而不是默认值。我不知道要怎么做才能进入我的MapView来相应地设置图钉。 我的工作循环和某些尝试… 问题答案: 您需要实现委托方法并从那里返回一个(或子类)。 就像在Objective-C中一样-基础SDK的工作方式相同。 从添加注释的循环中删除创建的内容,并改为

  • 自定义个人地图,即将自己绘制的地图代替ios自带的地图。并在个人地图上加上地图标注。 [Code4App.com]

  • 最近我一直在探索使用函数及其变体的各种应用,我特别感兴趣的是使用将所有参数传递到。下面的数据集属于我们今天早些时候与多位非常有知识的用户讨论的另一个问题。我们应该根据列中的值沿着它们各自的行重复列中的值,以获得以下输出: 输出: 非常感谢您的提前和非常抱歉的冗长的描述。

  • 本教程上接 教程 第1部分 。 我们将继续开发 Web-poll 应用,并且专注在 Django 的 自动生成的管理网站上。 哲理 为你的员工或客户生成添加、修改和删除内容的管理性网站是个单调乏味的工作。 出于这个原因,Django 根据模型完全自动化创建管理界面。 Django 是在新闻编辑室环境下编写的,“内容发表者”和“公共”网站之间有 非常明显的界线。网站管理员使用这个系统来添加新闻、事件

  • 使用 HTTP 基本身份验证和 ConfigSlurper 在本期 实战 Groovy 文章中,Scott Davis 将继续构建 第 1 部分 中的 Groovy Twitter 客户机:Gwitter。这次,他将解决 HTTP Basic 身份验证问题,并使用 Groovy 的 ConfigSlurper 读入配置设置。 在 “SwingBuilder 和 Twitter API,第 1 部分

  • 更多一键式部署模式 Java™部署常常很混乱,容易出现错误,需要许多手工操作,这会延误向用户交付软件的时间。本文是分两部分的让开发自动化系列文章的第 2 部分。在本文中,自动化专家 Paul Duvall 进一步补充用于开发可靠、可重复且一致的部署流程的一些关键模式,帮助读者为 Java 应用程序生成简便的部署。 关于本系列 作为开发人员,我们致力于为用户自动化流程;但许多开发人员疏忽了自动化我们