Мы используем MvvmCross 4.4.0 в нашем проекте iOS , и я столкнулся со следующей проблемой:
- Мне нужно реализовать страницу "Item" со ссылкой на другую
«Элемент» page;
- Мне нужна мгновенная обратная навигация от любой "Элемента" к предыдущему контроллеру ( "Каталог" контроллера).
Диаграмма:
Каталог --ConcreteItem -> Item1 --MoreItems -> Item2 --MoreItems ->
Item3 --BackNavButton -> Каталог.
В Custom ViewPresenter я делаю следующее:
var topViewController = ParentRootViewController.TopViewController;
ParentRootViewController.PushViewController(currentViewController, needAnimation);
if (topViewController.GetType() == currentView.GetType()
&& /*Logic to determine if its correct view types*/)
{
topViewController.RemoveFromParentViewController();
topViewController.Dispose();
}
И на самом деле это работает, пока я не вернусь на страницу "Каталог" .
Проблема в том, что мне нужно нажимать кнопку «назад» так много раз, что я нажимал кнопку «Еще» на странице «Элемент» . Также, если мы используем пользовательскую кнопку возврата с таким кодом в «Каталоге» и «Элемент» страниц:
if (NavigationController?.NavigationBar?.BackItem != null)
{
var backbutton = new UIBarButtonItem(" ",
UIBarButtonItemStyle.Plain,
(sender, e) => { NavigationController?.PopViewController(true); })
{
Image = UIImage.FromBundle("BackButtonImage")
};
NavigationItem.LeftBarButtonItem = backbutton;
}
, затем происходит сбой приложения при нажатии «Назад» NavButton на «Каталоге» страница с lambda
(sender, e) => { NavigationController?.PopViewController(true);
Расположенный объект ItemPageViewController .
Вопрос: как правильно реализовать страницу "SingleTop" в MvvmCross?
Или
Как решить эту проблему?
P.S .: Если из MvxPresenter удалить строку
topViewController.Dispose();
тогда в настраиваемой лямбде сгенерирует исключение NullReferenceException.
P.P.S .: Я считаю, что проблема в том, что я не удаляю контроллер из стека навигации. Я пытался удалить контроллеры в Custom View Presenter, но, во-первых, иногда он нулевой, и даже с нулевой проверкой ничего не помогло.