2013-10-24 4 views
0

У меня есть приложение iOS Я работаю над использованием Xamarin и MVVMCross, но я также использую стороннюю родную библиотеку, которая включает в себя некоторые собственные представления (загруженные из .xib файлов с реализацией в библиотека). Мне нужно сделать некоторые свойства в этих собственных представлениях, и я пытаюсь понять, есть ли способ сделать это, что не связано с переходом на xcode и попыткой перекомпилировать все это (потому что я не могу получить это работающий в данный момент).Глобальный крючок для показа UIViews

Итак, мой вопрос в том, есть ли способ перехватить всю прикладную программу, все попытки загрузить представление, чтобы я мог просматривать представление, и если это один из тех, что есть в сторонней библиотеке, задайте некоторые свойства на он перед его отображением?

MvvmCross имеет MvxTouchViewPresenter, у которого есть свойство ChangePresentation, но оно относится только к MvxViewController, загружаемому самим MvvmCross.

ответ

1

Вы можете очень легко перехватить все попытки доступа к viewmodel путем переопределения метода Show() на вашем MvxTouchPresenter. Например:

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

Вы можете изучить все представления иерархии UIView, используя нечто похожее на Objective-C code in this post. Вам просто нужно пройти через все UIViews в свойстве viewController и определить ваше мнение (возможно, «обоняв его» с помощью responsesToSelector, я не могу точно определить, как вы будете использовать isKindOfClass, если Xamarin этого не знает).

Надеюсь, я понял ваш вопрос. Дайте мне знать, если что-то еще отсутствует.

+0

Спасибо, но я смотрю на просмотр, открытый по собственному коду, а не на открытые MvvmCross. 'Show' никогда не вызывается, потому что это не запрос модели представления. –

+0

Ничего себе, ну в этом случае я думаю, вам нужно подклассифицировать представление. Я думаю, вы определили, что вам нужно что-то делать, но вы не можете скомпилировать некоторые вещи в Xcode. Я знаю, что есть соблазн попытаться найти действительно сложное техническое решение, чтобы избежать того, чего вы не хотите делать, но я действительно думаю, что вы пытаетесь решить неправильную проблему в этом случае. Возможно, ваш вопрос должен быть «Почему X не компилируется? Я получаю ошибку Y». –

Смежные вопросы