UIKit中如何访问枚举创建的地图视图以切换显示样式?
解决MKMapView样式切换无效的问题
你的问题核心是在按钮点击方法里创建了一个全新的MKMapView实例,而非操作界面上已存在的那个地图视图。以下是修正步骤:
1. 移除无用的本地mapView变量
在didTapOnViewButton方法里,你声明的var mapView = MKMapView()是一个和界面无关的新对象,修改它的类型不会影响显示的地图,直接删掉这个变量。
2. 访问contentView中的真实地图视图
通过contentView.mapView直接获取TripRouteView里创建的那个地图实例,修改它的mapType属性即可。
修正后的按钮点击方法代码:
@objc private func didTapOnViewButton() { showingSatelliteMapView.toggle() if showingSatelliteMapView { contentView.mapView.mapType = .satellite } else { contentView.mapView.mapType = .standard } }
额外说明
因为TripRouteView中的mapView是默认的internal访问级别(同一个项目模块内可直接访问),所以ViewController可以直接调用。如果后续需要限制访问权限,可以在TripRouteView中添加一个专门修改地图类型的方法,比如:
// 在TripRouteView中添加 func setMapType(_ type: MKMapType) { mapView.mapType = type }
然后在ViewController中调用:
contentView.setMapType(showingSatelliteMapView ? .satellite : .standard)
内容的提问来源于stack exchange,提问作者user21481382
相关产品推荐
相关产品推荐

