我们想在Xamarin.iOS应用的右上角添加一个菜单按钮。我们知道如何通过这样设置NavigationItem对象RighBarButtonItem在每个ViewController中做到这一点:
public override void ViewDidLoad()
{
base.ViewDidLoad();
var menuButton = new UIBarButtonItem(UIImage.FromBundle("ic_menu.png"), UIBarButtonItemStyle.Plain, MenuButtonTouchUpInside);
NavigationItem.RightBarButtonItem = menuButton;
searchResultListView.Source = new ObjectFilterTableSource(TableViewData, this);
}
但是我们不想在每个视图控制器中放置此按钮及其处理程序,因此我们想到了从UINavigationViewController继承来将菜单按钮放置在NavigationItem对象中的想法,但似乎每个视图控制器都有自己的按钮它的实例,因此在我们的视图控制器中未显示任何按钮。这是我们的子类UINavigationController:
public partial class MainNavigationController : UINavigationController
{
public MainNavigationController (IntPtr handle) : base (handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
var menuButton = new UIBarButtonItem("Menu", UIBarButtonItemStyle.Plain, MenuButtonTouchUpInside);
NavigationItem.SetRightBarButtonItem(menuButton, false);
}
public void MenuButtonTouchUpInside(object sender, EventArgs ea)
{
System.Diagnostics.Debug.WriteLine("button tapped");
var viewController = Storyboard.InstantiateViewController("MenuViewController") as MenuViewController;
NavigationController.PushViewController(viewController, true);
}
}
如您所见,当按下菜单按钮时,应该会出现一个带有菜单的新屏幕。没有花哨的侧边菜单栏之类的东西。只是一个新的屏幕。听起来很简单,我们无法实现目标。
我们知道代码已执行。我们知道按钮已创建。有人知道这可能是什么问题吗?这是否是实现我们主要目标的有效方法,那就是尽可能地重用最大的代码?我们不希望在应用程序的所有UIViewControllers类中重复相同的代码。
非常感谢!