Как получить доступ к большинству контроллеров вида сверху в Xamarin iOS с помощью Mvvmcross?

мы хотим найти самый верхний ViewController в стеке представлений, чтобы представить небольшое всплывающее окно. Для этого узнаем NavigationController ключевого окна rootviewcontroller:

var root = UIApplication.SharedApplication.KeyWindow.RootViewController.NavigationController;
var ctrl = rootNav.TopViewController as ViewControllerBase; // our own VC
return ctrl != null ? ctrl.Popup : null;

Это работает в режиме отладки - в режиме выпуска «RootViewController» имеет значение null? Предоставляет ли MVX другое решение для этого? Как нам получить доступ к UINavigationController?


person Michael Probst    schedule 15.07.2013    source источник


Ответы (2)


Разница между отладкой и выпуском предполагает, что это эффект Xamarin.iOS/MonoTouch, возможно, связанный с настройками компоновщика.

Вероятно, стоит выяснить, в чем заключается эта проблема, и попытаться ее исправить.

Однако, если вам нужно быстрое исправление — если вместо этого вы хотите использовать сохраненную ссылку MvvmCross на RootViewController, вы можете сделать это в пользовательском презентере, который наследуется от MvxTouchViewPresenter — см. MvxTouchViewPresenter.cs#L158

person Stuart    schedule 15.07.2013
comment
Спасибо, Стюарт, за быстрое исправление. Я уже реализовал его таким образом, и он отлично работает. Наш ViewPresenter теперь владеет статическим свойством с именем RootViewController, и у нас есть доступ к нему в любом месте приложения :) - person Michael Probst; 15.07.2013

Это дает вам лучший контроллер просмотра

 var topVC = UIApplication.SharedApplication.KeyWindow.RootViewController;
                while (topVC.PresentedViewController != null)
                {
                    topVC = topVC.PresentedViewController;
                }
person TheDeveloper    schedule 20.11.2018