• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - MvvmCross iOS : How to bind MapView Annotation to jump to another view?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:41:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

当点击标注附件按钮时,如何绑定(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?
        }
    }
}



Best Answer-推荐答案


您可以通过多种方式做到这一点。

鉴于您已经在使用固定的非绑定(bind)(非更新)单项显示,那么最简单的方法可能是您只需扩展您的 Annotation 以便使用 ICommand 创建它以及 lat、lng 和 label:

CreateNewAnnotation(
  ViewModel.CurrentLat, 
  ViewModel.CurrentLong, 
  ViewModel.ShowDetailCommand, 
  "You are here")

完成后,ICommand:

  • 然后可以轻松地从您的 callout 或 buttonView 的 TouchUpInsideCalloutAccessoryControlTapped 处理程序调用。
  • 可以在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap