问题描述
我使用Xamarin.iOS和MVVMCross。我的应用程序的体系结构如下:
+-----------------------+
| Rootviewmodel |
| RootViewController |
| [MvxRootPresentation] |
| |
+--------+----+---------+
| |
+-----------+ +------------+
| |
+----------+----------+ +-----------+---------+
|Tab1viewmodel | |Tab2viewmodel |
|Tab1ViewController | |Tab2ViewController |
|[MvxTabPresentation] | |[MvxTabPresentation] |
| | | |
+---------------------+ +---------------------+
问题是,导航栏在选项卡ViewController中设置。我必须在NavigationItem.Title上显示一些信息,该信息存储在Rootviewmodel中。我可以拥有一个在RootViewController中初始化的通用导航栏吗? 或者如果无法实现,我可以从TabViewController访问Rootviewmodel吗?
解决方法
- 在
RootViewController
中,将修饰添加到类中。
[MvxRootPresentation(WrapInNavigationController = true)]
public partial class RootViewController : MvxTabBarViewController<RootViewModel>
- 在标签控制器中添加修饰符:
[MvxTabPresentation(WrapInNavigationController = false,TabName = "Tab1Title",TabIconName = "Tab1Icon")]
public partial class Tab1ViewController : ViewController<Tab1ViewModel>
- 在标签控制器中,还应在
ViewDidLoad
中添加它以隐藏单个导航栏:
public override void ViewDidLoad()
{
base.ViewDidLoad();
if (NavigationController != null && NavigationController.NavigationBar != null)
{
NavigationController.NavigationBar.Hidden = true;
}
}
奖金。您可以在RootViewController
protected override void SetTitleAndTabBarItem(UIViewController viewController,MvxTabPresentationAttribute attribute)
{
attribute.TabName = _yourLocalizationService.Translate(attribute.TabName);
base.SetTitleAndTabBarItem(viewController,attribute);
}