菜鸟教程小白 发表于 2022-12-12 12:41:33

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


                                            <p><p>当点击标注附件按钮时,如何绑定(bind) MapView 的注释以切换到不同的 View ?如何实现注解的 CalloutAccessoryControlTapped 方法?</p>

<p>或者最好的方法是什么?</p>

<p>这是我的代码:</p>

<pre><code>
public class MapView : MvxViewController
{

    public override void ViewDidLoad()
    {
      Title = &#34;Map&#34;;
      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, &#34;You are here&#34;));

      var set = this.CreateBindingSet&lt;MapView, MapViewModel&gt;();
      set.Bind(mapView).For(???).To(vm =&gt; 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 = &#34;locationPinId&#34;;
            var pinView = (LocationAnnotationView)mapView.DequeueReusableAnnotation(pinId) ??
                        new LocationAnnotationView
                  {
                        Annotation = annotation,
                        RestorationIdentifier = pinId,
                        Image = UIImage.FromBundle(&#34;images/map_pointer_icon_small.png&#34;),
                  };

                var buttonView = new UIButton(new RectangleF(0, 0, 27, 27));
                buttonView.SetImage(UIImage.FromBundle(&#34;images/blue_arrow.png&#34;), 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?
      }
    }
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以通过多种方式做到这一点。</p>

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

<pre><code>CreateNewAnnotation(
ViewModel.CurrentLat,
ViewModel.CurrentLong,
ViewModel.ShowDetailCommand,
&#34;You are here&#34;)
</code></pre>

<p>完成后,<code>ICommand</code>:</p>

<ul>
<li>然后可以轻松地从您的 callout 或 buttonView 的 <code>TouchUpInside</code> 或 <code>CalloutAccessoryControlTapped</code> 处理程序调用。</li>
<li>可以在 <code>ShowDetailCommand</code> 中作为导航命令实现 - 参见 <a href="http://mvvmcross.wordpress.com/" rel="noreferrer noopener nofollow">http://mvvmcross.wordpress.com/</a> 中的 N=5导航示例。</li>
</ul>

<p>如果您确实想要一个更加动态的注解 - 具有真正的数据绑定(bind),那么您需要开始考虑将数据绑定(bind)添加到您的自定义 Annotation 类、您的自定义 AnnotationView 以及您的自定义 MapViewDelegate - 这个类似于将数据绑定(bind)添加到 UIView 的方式 - 参见 <a href="https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxView.cs" rel="noreferrer noopener nofollow">MvxView.cs</a> - 但对于您当前的示例,可能<em>矫枉过正</em>。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - MvvmCross iOS : How to bind MapView Annotation to jump to another view?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17756846/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17756846/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - MvvmCross iOS : How to bind MapView Annotation to jump to another view?