Swift - 从另一个类访问mapView的麻烦

时间:2015-01-21 15:09:47

标签: ios swift mkmapview viewcontroller

我想通过属于tableView中的单元格的按钮在地图上设置位置。问题是,如何获取我的ViewController的当前瞬间而不是创建一个新的?我的CustomCell中的方法如下:

@IBAction func mapButton(sender: AnyObject) {
        ViewController().showPinOnMap(Location)
    }
} 

我最终将mapView等于nil,我猜是因为我实例化新的ViewContoller而不是访问已存在的那个。 我读过关于类型方法的内容,但我不确定如何处理它们。在我的ViewController中,我试过:

class func showPinOnMap(location: CLLocationCoordinate2D?){
    if(location != nil){
        map.setCenterCoordinate(location!, animated: true)
    }
}

但会导致以下错误 enter image description here

我想整个事情是关于访问ViewController实例而不是创建一个全新的实例(如果我错了,请纠正我)。

我很感激任何帮助,提前谢谢

1 个答案:

答案 0 :(得分:2)

您没有调用ViewController的实际实例,而是调用类本身。 map但是ViewController的实例的成员。要解决此问题,您必须在相应的实例上调用map

这可以通过回调来完成。例如。在CustomCell中定义一个变量:

var onMapButtonCallback : ((CLLocationCoordinate2D) -> Void)?

然后您可以从mapButton执行:

@IBAction func mapButton(sender: AnyObject) {
    onMapButtonCallback?(Location)
} 

剩下要做的事情就是连接ViewController中的回调,我假设它也实例化CustomCell

customCell.onMapButtonCallback = { location in self.showPinOnMap(location) }