在MapBox中,我希望当用户触摸注释引脚时,会出现标注中的tableview。我尝试使用,但它最终覆盖整个屏幕。有没有更好的方法来实现这一目标?
func mapView(_ mapView: MGLMapView, leftCalloutAccessoryViewFor annotation: MGLAnnotation) -> UIView? {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc: UITableViewController = storyboard.instantiateViewController(withIdentifier: "newtableview") as! UITableViewController
self.present(vc, animated: true, completion: nil)
return nil
}
答案 0 :(得分:1)
这种情况正在发生,因为您正在将新的vc推送到导航堆栈。以前的地图vc现在位于上一页。要实现该功能,您必须从头开始创建标注。以下内容将为您提供最大程度的自定义控制:
子类MKAnnotation。这应包括自定义标注所需的所有数据
子类UIView。该视图将包含您的tableview。它应接受步骤1中的数据。
使用mapView:didSelect委托方法。当用户选择注释时,将调用此方法,并传递一个MKAnnotationView,该MKAnnotationView具有MKAnnotation作为属性。将其作为子类投射,您应该拥有标注所需的所有数据
手动添加标注。从步骤2创建UIView的新实例。您可以从步骤3中说明的步骤1中访问MKAnnotation子类中的数据。将此视图作为子视图添加到地图中。
布局标注。手动设置框架或使用autolayout。您可以通过MKAnnotationView的框架获取所选注释的位置。