用于显示UIViews的全局钩子

时间:2013-10-24 13:52:27

标签: ios xamarin mvvmcross

我有一个iOS应用程序我正在使用Xamarin和MVVMCross,但我也使用第三方本机库,其中包含一些自己的视图(从.xib加载具有库中实现的文件)。我需要做的是在这些原生视图上设置一些属性,并且我试图看看是否有这样做的方法并不涉及跳转到xcode并尝试重新编译整个事物(因为我现在无法做到这一点。

所以我的问题是,有没有办法拦截,应用程序范围内,所有加载视图的尝试,以便我可以检查视图,如果它是第三方库中的一个,设置它显示之前的一些属性?

MvvmCross的MvxTouchViewPresenter有一个ChangePresentation属性,但它似乎只适用于MvvmCross本身加载的MvxViewController

1 个答案:

答案 0 :(得分:1)

您可以通过覆盖MvxTouchPresenter上的Show()方法轻松拦截所有访问视图模型的尝试。例如:

    public override void Show(MvxViewModelRequest request)
    {
        IMvxTouchView view = this.CreateViewControllerFor(request);
        UIViewController viewController = (UIViewController) view;
        this.Show(view);
    }

然后,您可以使用类似Objective-C code in this post的内容检查UIView层次结构中的所有视图。您只需要遍历viewController属性中的所有UIViews并识别您的视图(可能通过使用respondsToSelector“闻它”;如果Xamarin不知道它,我无法弄清楚你如何使用isKindOfClass)。 / p>

我希望我理解你的问题。如果还有其他遗漏,请告诉我。