继承UINavigationController以在所有UIViewControllers中重用菜单按钮

时间:2018-07-23 12:33:13

标签: c# uiviewcontroller xamarin.ios uinavigationcontroller

我们想在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类中重复相同的代码。

非常感谢!

0 个答案:

没有答案