无法在不同 class 上访问地图视图
Can't access mapview on different class
我正在开发一个 iOS 应用程序,但有一个小错误。我的项目包含以下内容:
- 地图视图顶部的自定义搜索栏(
HomeViewController.swift
)
- 使用显示搜索结果的表格视图查看 (
LocationSearchTable.swift
)
搜索时,我在地图视图顶部和搜索栏后面添加了带有表格视图的视图。这一切都很好。
但是现在当我 select 来自 tableView 的搜索结果时它崩溃了,因为它说我的 mapView 是 nil。
我在 HomeViewController.swift
中有以下内容:
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
mapView.delegate = self
}
像这样将 LocationSearchTable 添加到 mapView:
func didChangeSearchText(searchText: String) {
if (searchText == "" ) {
self.locationSearchTable.view.removeFromSuperview()
} else {
self.view.insertSubview(self.locationSearchTable.view, aboveSubview: mapView)
}
}
在 LocationSearchTable.swift 上,我想在点击列表中的内容时调用 mapView:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let mapView = HomeViewController().mapView
print(mapView)
}
当试图从那里访问 mapView 时,它是 nil
。这是为什么?我在这里错过了什么?
亲切的问候,
沃特
您创建了一个新的 HomeViewController 实例,然后在 awakeFromNib 方法发生之前请求它的 mapView。在将 HomeViewController 控制器添加到屏幕之前,此时的 mapView 将为 nil
如果我正确阅读您的层次结构,处理此问题的最佳方法是使用您的表视图中的地图委托回视图。
或者您可以将对 mapView 的引用传递给 tableView
我正在开发一个 iOS 应用程序,但有一个小错误。我的项目包含以下内容:
- 地图视图顶部的自定义搜索栏(
HomeViewController.swift
) - 使用显示搜索结果的表格视图查看 (
LocationSearchTable.swift
)
搜索时,我在地图视图顶部和搜索栏后面添加了带有表格视图的视图。这一切都很好。
但是现在当我 select 来自 tableView 的搜索结果时它崩溃了,因为它说我的 mapView 是 nil。
我在 HomeViewController.swift
中有以下内容:
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
mapView.delegate = self
}
像这样将 LocationSearchTable 添加到 mapView:
func didChangeSearchText(searchText: String) {
if (searchText == "" ) {
self.locationSearchTable.view.removeFromSuperview()
} else {
self.view.insertSubview(self.locationSearchTable.view, aboveSubview: mapView)
}
}
在 LocationSearchTable.swift 上,我想在点击列表中的内容时调用 mapView:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let mapView = HomeViewController().mapView
print(mapView)
}
当试图从那里访问 mapView 时,它是 nil
。这是为什么?我在这里错过了什么?
亲切的问候,
沃特
您创建了一个新的 HomeViewController 实例,然后在 awakeFromNib 方法发生之前请求它的 mapView。在将 HomeViewController 控制器添加到屏幕之前,此时的 mapView 将为 nil
如果我正确阅读您的层次结构,处理此问题的最佳方法是使用您的表视图中的地图委托回视图。
或者您可以将对 mapView 的引用传递给 tableView