Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MvvmCross iOS:如何绑定MapView注释以跳转到另一个视图?_Ios_Xamarin_Mvvmcross - Fatal编程技术网

MvvmCross iOS:如何绑定MapView注释以跳转到另一个视图?

MvvmCross iOS:如何绑定MapView注释以跳转到另一个视图?,ios,xamarin,mvvmcross,Ios,Xamarin,Mvvmcross,单击地图视图的详图索引附件按钮时,如何绑定地图视图的注释以切换到不同的视图?如何实现注释的CalloutAccessoryControlTapped方法 或者最好的方法是什么 这是我的密码: [Register("MapView")] public class MapView : MvxViewController { public override void ViewDidLoad() { Title = "Map"; base.ViewDid

单击地图视图的详图索引附件按钮时,如何绑定地图视图的注释以切换到不同的视图?如何实现注释的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?
        }
    }
}
[注册(“地图视图”)]
公共类映射视图:MvxViewController
{
公共覆盖无效ViewDidLoad()
{
Title=“地图”;
base.ViewDidLoad();
var mapView=新的MKMapView(新的矩形F(0,0,320,UIScreen.MainScreen.Bounds.Height-20-44))
{
MapType=MKMapType.Standard,
ZoomEnabled=true,
ScrollEnabled=true,
Delegate=新映射Delegate(),
};
视图。添加子视图(mapView);
var中心=新的CLLocationCoordinate2D(ViewModel.CurrentLat,ViewModel.CurrentLong);
var span=新的MKCoordinateSpan(5.0,5.0);
var区域=新的MK坐标区域(中心,跨度);
SetRegion(region,true);
AddAnnotation(CreateNewAnnotation(ViewModel.CurrentLat,ViewModel.CurrentLong,“您在这里”);
var set=this.CreateBindingSet();
set.Bind(mapView).For(???).To(vm=>vm.showtailCommand);//当用户单击地图批注时,如何绑定到地图批注并切换到其他视图?
set.Apply();
}
受保护的类MapDelegate:MKMapViewDelegate
{
公共覆盖MKAnnotationView GetViewForAnnotation(MKMMAVIEW MAPVIEW,MyTrask.Fuff.NSObjt注释)
{
var pinId=“locationPinId”;
var pinView=(LocationAnnotationView)mapView.DequeueReusableAnnotation(pinId)??
新位置注释视图
{
注释=注释,
RestorationIdentifier=pinId,
Image=UIImage.FromBundle(“images/map\u pointer\u icon\u small.png”),
};
var buttonView=新UIButton(新矩形F(0,0,27,27));
buttonView.SetImage(UIImage.FromBundle(“images/blue_arrow.png”)、UIControlState.Normal);
buttonView.Tag=88888;
pinView.RightCalloutAccessoryView=按钮视图;
返回pinView;
}
公共覆盖无效调用访问控制点击(MKMapView映射视图、MKAnnotationView视图、UIControl控制)
{
//如何绑定此方法,以便用户单击注释时可以切换到其他视图?
}
}
}

您可以通过多种方式实现这一点

考虑到您已经在使用固定的非绑定(非更新)单项显示,那么最简单的方法可能是扩展注释,以便使用
ICommand
以及lat、lng和标签创建注释:

CreateNewAnnotation(
  ViewModel.CurrentLat, 
  ViewModel.CurrentLong, 
  ViewModel.ShowDetailCommand, 
  "You are here")
完成此操作后,然后执行
i命令

  • 然后可以很容易地从调出或从按钮视图的
    触碰内部
    或从
    调出访问控制点击
    处理程序调用
  • 可以在
    showtailcommand
    中作为导航命令实现-有关导航示例,请参见中的N=5
如果您确实想要一个更加动态的注释—使用真正的数据绑定,那么您需要开始考虑向自定义注释类添加数据绑定,对于自定义AnnotationView,或者对于自定义MapViewDelegate,这类似于将数据绑定添加到UIView的方式—请参见—但对于当前示例来说,这可能有些过分