在我的 View Controller 中,MKMapView有一个导出,并且 View Controller 自然符合MKMapViewDelegate来执行MapKit操作。

我正在尝试在项目进一步发展之前迁移到MVVM模型,以使其保持整洁。但是,我在如何将所有MKMapViewDelegate方法移动到另一个文件(其中MKMapView导出位于 View Controller 中)的空白中。

谢谢。

附言我正在用Swift编码

最佳答案

当我创建与 View Controller 分离的GMSMapViewDelegate时,我遇到了类似的情况。

我做了什么,您可以尝试:

  • 创建一个扩展NSObject和MKMapViewDelegate的类。 (委托(delegate)需要符合NSObjectProtocol)
  • 您需要在新类中创建和设置mapView,但是让 View Controller 访问它。
  • 注意-请记住在 View Controller 中维护对新类的引用。在 map View 中,委托(delegate)是一个弱变量。

  • MapModelView.swift
    class MapModelView:NSObject, MKMapViewDelegate {
    
       let mapView:MKMapView!
    
       init(screenSize: CGRect) {
            // generate the map view at the size of the screen
            // otherwise it won't be seen
            self.mapView = MKMapView(frame: CGRectMake(0, 0, screenSize.width, screenSize.height)
            super.init()
            self.mapView.delegate = self
        }
    }
    

    ViewController.swift
    class ViewController: UIViewController {
        @IBOutlet weak var mapView: MKMapView!
    
        override func viewDidLoad() {
            // Get the screen size for the map view creation
            let screenSize: CGRect = UIScreen.mainScreen().bounds
    
            mapKitOperationsDelegate = MapKitOperations(screenSize: screenSize)
            mapView = mapKitOperationsDelegate.getMapView()
            view.addSubview(mapView)
        }
    

    (添加02/08/2018)

    PS

    正如Chanchal Raj提到的“MapView是一个UI组件,不应将其放在ViewModel类中”。当时是我的解决方案,但从概念上讲(使用MVVM),这不是正确的方法。

    10-08 05:49
    查看更多