当点击标注附件按钮时,如何绑定(bind) MapView 的注释以切换到不同的 View ?如何实现注解的 CalloutAccessoryControlTapped 方法?
或者最好的方法是什么?
这是我的代码:
[Register("MapView")]
public class MapView : MvxViewController
{
public override void ViewDidLoad()
{
Title = "Map";
base.ViewDidLoad();
var mapView = new MKMapView(new RectangleF(0, 0, 320, UIScreen.MainScreen.Bounds.Height - 20 - 44))
{
MapType = MKMapType.Standard,
ZoomEnabled = true,
ScrollEnabled = true,
Delegate = new MapDelegate(),
};
View.AddSubview(mapView);
var center = new CLLocationCoordinate2D(ViewModel.CurrentLat, ViewModel.CurrentLong);
var span = new MKCoordinateSpan(5.0, 5.0);
var region = new MKCoordinateRegion(center, span);
mapView.SetRegion(region, true);
mapView.AddAnnotation(CreateNewAnnotation(ViewModel.CurrentLat, ViewModel.CurrentLong, "You are here"));
var set = this.CreateBindingSet<MapView, MapViewModel>();
set.Bind(mapView).For(???).To(vm => vm.showDetailCommand); // how can I bind to the map annotation and switch to other view when user click it?
set.Apply();
}
protected class MapDelegate : MKMapViewDelegate
{
public override MKAnnotationView GetViewForAnnotation(MKMapView mapView, MonoTouch.Foundation.NSObject annotation)
{
var pinId = "locationPinId";
var pinView = (LocationAnnotationView)mapView.DequeueReusableAnnotation(pinId) ??
new LocationAnnotationView
{
Annotation = annotation,
RestorationIdentifier = pinId,
Image = UIImage.FromBundle("images/map_pointer_icon_small.png"),
};
var buttonView = new UIButton(new RectangleF(0, 0, 27, 27));
buttonView.SetImage(UIImage.FromBundle("images/blue_arrow.png"), UIControlState.Normal);
buttonView.Tag = 88888;
pinView.RightCalloutAccessoryView = buttonView;
return pinView;
}
public override void CalloutAccessoryControlTapped(MKMapView mapView, MKAnnotationView view, UIControl control)
{
// how can I bind this method, so when the user click on the annotation it can switch to other view?
}
}
}
您可以通过多种方式做到这一点。
鉴于您已经在使用固定的非绑定(bind)(非更新)单项显示,那么最简单的方法可能是您只需扩展您的 Annotation 以便使用 ICommand
创建它以及 lat、lng 和 label:
CreateNewAnnotation(
ViewModel.CurrentLat,
ViewModel.CurrentLong,
ViewModel.ShowDetailCommand,
"You are here")
完成后,ICommand
:
TouchUpInside
或 CalloutAccessoryControlTapped
处理程序调用。ShowDetailCommand
中作为导航命令实现 - 参见 http://mvvmcross.wordpress.com/ 中的 N=5导航示例。如果您确实想要一个更加动态的注解 - 具有真正的数据绑定(bind),那么您需要开始考虑将数据绑定(bind)添加到您的自定义 Annotation 类、您的自定义 AnnotationView 以及您的自定义 MapViewDelegate - 这个类似于将数据绑定(bind)添加到 UIView 的方式 - 参见 MvxView.cs - 但对于您当前的示例,可能矫枉过正。
关于ios - MvvmCross iOS : How to bind MapView Annotation to jump to another view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17756846/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |