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

2024-04-04

当单击标注附件按钮时,如何绑定 MapView 的注释以切换到不同的视图?如何实现注释的 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?
        }
    }
}

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

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

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

完成此操作后,然后ICommand:

  • 然后可以轻松地从您的callout或您的buttonView中调用TouchUpInside或从你的CalloutAccessoryControlTapped处理程序。
  • 可以在里面实现ShowDetailCommand作为导航命令 - 参见 N=5http://mvvmcross.wordpress.com/ http://mvvmcross.wordpress.com/有关导航的示例。

如果您确实想要一个更动态的注释 - 具有真正的数据绑定,那么您需要开始考虑将数据绑定添加到您的自定义 Annotation 类、您的自定义 AnnotationView 以及您的自定义 MapViewDelegate - 这将是类似的将数据绑定添加到 UIView 的方式 - 请参阅MvxView.cs https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Touch/Views/MvxView.cs- 但可能是overkill对于您当前的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MvvmCross iOS:如何绑定MapView Annotation跳转到另一个视图? 的相关文章

随机推荐

  • PhoneGap iOS 7 和 localStorage

    我目前正在构建一个 PhoneGap 3 3 0 iOS 应用程序 该应用程序使用 Ember js EmberData 和 LocalStorage 适配器来保存数据 读了一些文章后就像这个 StackOverflow 问题 https
  • 集合接口和WCF

    我正在使用 C 和 WCF 来做 Web 服务 我有一个实现 IEnumerable 的类的成员变量 我尝试通过执行以下操作将其序列化为我的数据合同的一部分 DataContract class Item DataMember privat
  • 约束消失的情况:更高等级类型的怪异

    下面描述的所有实验都是使用 GHC 8 0 1 完成的 这个问题是后续问题具有类型别名混淆的 RankNTypes https stackoverflow com q 40252867 2751851 那里的问题归结为像这样的函数类型 LA
  • 获取 i18next 翻译器 缺少密钥

    这是我第一次使用 i18next 我不知道如何让它发挥作用 这似乎是文档 http i18next com docs 对我来说是不完整的 这是我使用 i18next 的 HTML 代码
  • JDBC无法在openshift上连接mysql数据库

    我设法使用 phpMyAdmin 等在 OpenShift 上设置 MySQL 数据库 我被告知我的数据库的主机名和端口分别是 OPENSHIFT MYSQL DB HOST 和 OPENSHIFT MYSQL DB PORT 我将其放入
  • 多次借用的借用错误

    我正在 Rust 中实现一个就地递归解析器 但遇到了一些借用错误 代码片段重现了问题 尽管它不是很有用 use std vec Vec struct MyBorrows lt a gt val a mut i32 impl lt a gt
  • com.fasterxml.jackson.databind.exc.InvalidTypeIdException:无法将类型 id '[' 解析为子类型

    我有一个名为 Fruit 的抽象类 我把 JsonTypeInfo and JsonSubTypes其如下 JsonTypeInfo use JsonTypeInfo Id NAME include JsonTypeInfo As PROP
  • 如何让ListView在转换到另一个路线时保留其滚动?

    我想在我的颤动应用程序中完成滑动到右侧的转换 问题是路线转换有点创建我想要从中转换的页面的新实例 所以ListView滚动重置 看视频 https youtu be PdLhyvNoU8 这就是我创建新路线的方式 oldRoute need
  • dompdf 图像不是真实图像,无法读取或为空

    我在使用 dompdf 时遇到问题 我插入的图像在转换为 pdf 文件时无法读取 当我使用将其加载到 dompdf 时 php方法 img src gt 我得到一个带有 X 的方框缩略图 它说 图像不是真实图像 不可读或为空 用文本打印我的
  • Nodejs JOIN 查询:格式化 JSON 输出

    我正在制作一个非常简单的 RIGHT JOIN 查询 但我无法正确格式化输出 这是查询 connection query sql SELECT users rides FROM users RIGHT JOIN rides ON users
  • 需要帮助 Discord 机器人队列

    我一直在尝试为不和谐机器人和我的 gt q命令基本上工作为join play queue同时 问题是它只能同时对 2 首歌曲进行排队 所以我需要帮助使其对多首歌曲进行排队 queues check queue def check queue
  • 重复 data.frame 的每一行列中指定的次数

    df lt data frame var1 c a b c var2 c d e f freq 1 3 扩展上面 data frame 的每行前两列 以便每行重复 freq 列中指定的次数 最简单的方法是什么 换句话说 从这里开始 df v
  • 如何将 Twitter 配置移出控制器? (导轨)

    我正在使用推特宝石 https github com sferik twitter通过斯费里克 我认为在控制器中存储我的 Twitter 应用程序的配置非常混乱 class HomeController lt ApplicationCont
  • 如何使用`[[`和`$`作为函数?

    我知道我可以这样做 x lt list a 1 b 1 y lt list a 1 JSON lt rep list x y 10000 sapply JSON a 然而 我在使用时遇到了困难 以同样的方式 sapply JSON a sa
  • 如何使用列表理解来模拟 sum()?

    是否可以使用 sum 来模拟类似的东西列表理解 http en wikipedia org wiki List comprehension Python 例如 我需要计算列表中所有元素的乘积 list 1 2 3 product magic
  • 发送多个请求时如何将结果与请求匹配?

    总结 正如其标题所示 Guzzle 允许一次发送多个请求以节省时间 如下所示文档 http docs guzzlephp org en latest http client client html sending requests resp
  • Google 地图静态 API 返回奇怪的图像

    我有一个页面 其静态地图 URI 的形式为 当我从任何浏览器访问此页面时 它显示得很好 但当我通过通过我们的 BES 连接的黑莓使用它时 但相同的无线网络 然后出现这个图像 有谁知道这张图是什么意思 你有超出使用限制 http code g
  • 如何获取自定义错误页面(Tomcat)中的消息?

    在 JSP 中 您可以使用response sendError int code String message 返回特定的错误代码 例如 404 表示未找到 和消息 只要您使用默认的丑陋的 Tomcat 错误页面 这些消息就可以正常显示 但
  • Javascript 在 window.open 之后调用函数

    我试图在 window open 函数完全加载后调用一个函数 然而 使用 onload 函数调用得太早了 所点击的 URL 将打开一个 Excel 电子表格 下载可能需要 2 秒到 1 分钟 一旦 window open 函数被调用 onl
  • MvvmCross iOS:如何绑定MapView Annotation跳转到另一个视图?

    当单击标注附件按钮时 如何绑定 MapView 的注释以切换到不同的视图 如何实现注释的 CalloutAccessoryControlTapped 方法 或者最好的方法是什么 这是我的代码 Register MapView public