同时加载从 TableViewController 访问 ViewController 出口



我正在阅读线程:另一个视图控制器的IBOutlet为零

我有一个与此非常相似的问题。

请求视图控制器

class DenunciasResueltasViewController: UIViewController {
    @IBOutlet var mapView: GMSMapView!
    var solicitudes = [SolicitudesModel]()
    var tempMap: GMSMapView!
        override func viewDidLoad() {
            super.viewDidLoad()
            let camera = GMSCameraPosition.camera(withLatitude: 3.4824182, longitude: -8.1776567, zoom: 15)
            self.mapView.camera = camera
    }
func recenterMap(latitude:Float!, longitude:Float!) -> Void {
        let coordinates = CLLocationCoordinate2DMake(CLLocationDegrees(latitude), CLLocationDegrees(longitude))
        mapView = tempMap
        self.mapView.animate(toLocation: coordinates)
    }

请求表视图控制器

class RequestTableViewController: UITableViewController {
        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//Some code to fill the table

        let viewController = self.storyboard?.instantiateViewController(withIdentifier: "RequestVC") as! RequestViewController
        viewController.recenterMap(latitude: solicitudes[indexPath.row].getLatitude(), longitude: solicitudes[indexPath.row].getLongitude() )
        return cell
    }
}

这两个组件在运行时同时初始化,我的意思是,两者都是同一视图的一部分。

当用户单击"行"时,我想更新mapView

为此,我正在使用"RecenterMap"方法。

但是,变量"self.mapView"始终为"nil"。如何更新此值?

您应该使用 delegate 方法didSelectRowAtIndexPath来重新居中,因为当用户在单元格上点击应用程序时会调用此方法。可能是第一个视图控制器的插座尚未设置,当第二个视图控制器开始填充其单元格时。

这是一个常见问题,想要在呈现当前屏幕外的 vc 之前访问它的属性。

您可以通过访问视图来强制构建视图层次结构来解决此问题:

let _ = viewController.view

在此之后,您可以自由访问视图控制器上任何与视图相关的属性。所以你应该把它放在你调用.recenterMap

之前

目前还不清楚您要做什么:您的代码似乎为每个表单元格实例化了一个带有 map 的视图控制器,但您在实例化后实际上并没有呈现它。

您实例化了RequestViewController,但它不会出现在视图层次结构中,因此在调用IBOutlet属性时不会实例化它们。通常,在UIViewController上调用view会实例化其上的所有插座。或者,您可以调用self.present(requestViewController)以显示它。

我的理解是,你同时拥有RequestViewController和RequestTableViewController,两者都是父视图的子视图,

1-您的地图中心函数需要在委托方法上调用:

didSelectRowAtIndexPath:

2-您需要对请求视图控制器的引用,并且不要从情节提要中实例化它。 因为您将获得一个新实例,而不是已经显示的实例。

最新更新