2013-10-24 82 views
0

我有一个iOS应用程序我正在使用Xamarin和MVVMCross,但我也使用第三方本地库,其中包括它自己的一些视图(从.xib文件加载的实现在图书馆)。我需要做的是设置这些原生视图的一些属性,我试图看看是否有办法做到这一点,不涉及跳入xcode并尝试重新编译整个事情(因为我无法得到目前工作)。显示UIViews的全局钩子

所以我的问题是,是否有一种方法来截取应用程序范围内的所有加载视图的尝试,以便我可以检查该视图,并且如果它是来自第三方库的那些视图之一,则将某些属性设置为它显示之前呢?

MvvmCross有MvxTouchViewPresenter它有一个ChangePresentation财产,但它似乎只适用于由MvvmCross本身加载MvxViewController

回答

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)。

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

+0

谢谢,但我正在查看通过本机代码打开的视图,而不是由MvvmCross打开的视图。 Show不会被调用,因为它不是视图模型请求。 –

+0

哇,在那种情况下,我认为你需要继承这个视图。我认为你确定你需要做这样的事情,但是你不能在Xcode中编译一些东西。我知道有一种尝试想出一个非常复杂的技术解决方案来避免你不想做的事情的诱惑,但我真的认为你在这种情况下试图解决错误的问题。也许你的问题需要“为什么不能X编译?我得到错误Y.” –