【问题标题】:Can't access mapview on different class无法访问不同班级的地图视图
【发布时间】:2016-06-01 11:43:22
【问题描述】:

我正在开发一个 iOS 应用程序,但有一个小错误。我的项目包含以下内容:

  • mapView 顶部的自定义搜索栏 (HomeViewController.swift)
  • 使用显示搜索结果的表格视图查看 (LocationSearchTable.swift)

搜索时,我将带有 tableview 的视图添加到我的 mapview 顶部和我的搜索栏后面。这一切都很好。

但是现在当我从 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。这是为什么?我在这里错过了什么?

亲切的问候,

沃特

【问题讨论】:

    标签: ios swift uitableview mkmapview


    【解决方案1】:

    您创建了一个新的 HomeViewController 实例,然后在方法 awakeFromNib 发生之前请求它的 mapView。在将 HomeViewController 控制器添加到屏幕之前,此时的 mapView 将为 nil

    如果我正确读取您的层次结构,处理此问题的最佳方法是使用您的 tableview 中的地图委托回视图。

    或者你可以将mapView的引用传递给tableView

    【讨论】:

    • 确实如此。给自己写了一个代表,它奏效了。感谢您为我指明正确的方向!真的为我节省了大量的时间。还是在这里学习iOS,哈哈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2016-03-12
    • 1970-01-01
    • 2011-03-24
    • 2021-03-25
    相关资源
    最近更新 更多