【问题标题】:Swift iOS Mapkit - Annotation not showingSwift iOS Mapkit - 未显示注释
【发布时间】:2015-10-19 07:26:34
【问题描述】:

在地图上显示注释时遇到了一些问题。地址字符串是从前一个 ViewController 传入的。一切正常,直到将注释推送到地图。有什么建议吗?

class PostViewController: UIViewController {
@IBOutlet weak var locationInput: UITextField!
@IBOutlet weak var debugText: UILabel!


@IBAction func postDirectionTouched(sender: AnyObject) {
    if locationInput.text!.isEmpty {
        debugText.text = "Location Input Empty."
    } else {
        nextSegue()
    }

}

func nextSegue() {
    dispatch_async(dispatch_get_main_queue(), {
        let controller = self.storyboard!.instantiateViewControllerWithIdentifier("LinkPostController") as! LinkPostViewController
        controller.address = self.locationInput.text!
        self.presentViewController(controller, animated: true, completion: nil)
    })
}

}

import UIKit
import CoreLocation
import AddressBook
import MapKit

class LinkPostViewController: UIViewController, MKMapViewDelegate {

@IBOutlet weak var pointMap: MKMapView!
@IBOutlet weak var linkInput: UITextField!
@IBOutlet weak var debugText: UILabel!
var address: String = ""
var coords: CLLocationCoordinate2D?

override func viewDidLoad() {
    super.viewDidLoad()

    self.mapLocation()

}

func mapLocation(){
    let geocoder = CLGeocoder()

    geocoder.geocodeAddressString(self.address, completionHandler: {(placemark, error) -> Void in
        if error != nil{
            print("Geocode failed with error: \(error!.localizedDescription)")
        } else if placemark!.count > 0 {
            let pm = placemark?[0]
            let location = pm!.location
            self.coords = location!.coordinate

            print(self.coords!)

            self.showMap()


        }

    })
}

func showMap() {
        print("last")
        let coordinates = self.coords
        let pinn = MKPointAnnotation()
        pinn.title = "hello"
        pinn.subtitle = "This my pin."
        pinn.coordinate = coordinates!



        dispatch_async(dispatch_get_main_queue()) {
            self.pointMap.addAnnotation(pinn)
        }
   }
func mapView(mapView: MKMapView, annotationView: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {}
}

【问题讨论】:

  • 代理方法mapView:viewForAnnotation:实现了吗?
  • 注解出现在另一个视图控制器中,还是您点击创建注解?换句话说:您正在点击不同 VC 中的地址,然后它出现在地图 VC 中?
  • 地址是一个字符串。 mapLocation() 使用 address 来坐标并触发 showMap()
  • 来自 TableViewViewController?如果是这样,您能否更新问题并添加该代码?
  • 不,我没有实现 mapView:viewForAnnotation:。我之前使用过带注释的 mapkit。

标签: ios swift mapkit mapkitannotation


【解决方案1】:

最简单的工作示例,在澳大利亚添加注释:

import UIKit
import MapKit

class ViewController: UIViewController {

    // MARK: - Private variables

    private var mapView: MKMapView?

    // MARK: - UIViewController methods

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        mapView = MKMapView(frame: view.frame)
        view.addSubview(mapView!)
        let locationCoordinate = CLLocationCoordinate2DMake(-25.27, 133.775)
        let pointAnnotation = MKPointAnnotation()
        pointAnnotation.coordinate = locationCoordinate
        mapView?.addAnnotation(pointAnnotation)
    }
}

检查 placemark!.count > 0(您的代码看起来正确)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多