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

所以我的问题是,是否有一种方法可以在应用程序范围内拦截所有尝试加载视图的尝试,以便我可以检查该视图,如果它是第三方库中的视图之一,则在显示该视图之前对其进行一些设置?

MvvmCross的MvxTouchViewPresenter具有ChangePresentation属性,但是它似乎仅适用于MvvmCross本身加载的MvxViewController

最佳答案

通过覆盖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属性中的所有UIView并标识您的视图(可能是通过使用responsToSelector来“闻到”;如果Xamarin不知道,则无法确切地知道您将如何使用isKindOfClass)。

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

关于ios - 用于显示UIViews的全局 Hook ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19567954/

10-08 21:06