0

我有一个我正在使用 Xamarin 和 MVVMCross 开发的 iOS 应用程序,但我也在使用第三方本机库,其中包括它自己的一些视图(从.xib库中实现的文件加载)。我需要做的是在这些本机视图上设置一些属性,我试图看看是否有一种方法可以做到这一点,而不涉及跳入 xcode 并尝试重新编译整个东西(因为我无法得到那个目前正在工作)。

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

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

4

1 回答 1

1

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

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

然后,您可以使用与本文中的Objective-C 代码类似的内容来检查 UIView 层次结构中的所有视图。您只需要遍历 viewController 属性中的所有 UIView 并识别您的视图(也许通过使用 respondsToSelector “闻一下”;如果 Xamarin 不知道它,我无法弄清楚您将如何使用 isKindOfClass)。

我希望我理解你的问题。让我知道是否还有其他遗漏。

于 2013-10-25T08:59:40.563 回答