Мы используем MvvmCross 4.4.0 в нашем проекте iOS, и я столкнулся со следующей проблемой:
- Мне нужно реализовать страницу "Элемент" со ссылкой на другую страницу "Элемент";
- Мне нужна мгновенная обратная навигация с любой страницы "Элемент" на предыдущий контроллер (контроллер "Каталог").
Диаграмма:
Каталог --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 на странице Каталог с лямбда-выражением
(sender, e) => { NavigationController?.PopViewController(true);
Удаляемый объект ItemPageViewController.
Вопрос: как правильно реализовать страницу "SingleTop" в MvvmCross?
Or
Как решить эту проблему?
P.S.: Если из MvxPresenter убрать строчку
topViewController.Dispose();
то в пользовательской лямбде будет вызываться исключение NullReferenceException.
P.P.S.: Я считаю, что проблема в том, что я не удаляю контроллер из стека навигации. Пробовал удалять контроллеры в Custom View Presenter, но, во-первых, там иногда null, и даже с проверкой null ничего не помогало.