titleView и rightBarButtonItem на всех контроллерах навигации

#ios #xamarin.ios #monotouch.dialog

#iOS #xamarin.ios #monotouch.dialog

Вопрос:

Я разрабатываю приложение на основе навигации, и у меня есть пользовательский titleView и rightBarButtonItem для панели навигации, которые я хочу видеть во всех элементах навигации моего приложения (например, логотип и кнопка меню, к которым вы можете получить доступ из всех представлений).

Есть ли какая-либо хорошая практика для реализации этого, а не для ручной настройки titleView и rightBarButtonItem каждый раз, когда я нажимаю новый ViewController? Я использую monotouch.dialog, но любые советы приветствуются, поскольку это больше похоже на вопрос о sdk.

С уважением,

Ответ №1:

Похоже, что наследование было бы решением для вас.

Возможно, вам следует подумать о создании материнского класса UIViewController, который занимается настройкой titleView и элемента RightBarButton, и тогда весь UIViewController из вашего приложения унаследует от этого класса.

Ответ №2:

Возможно, вы захотите сначала спросить себя, действительно ли вам нужна UINavigationBar, которая напрямую связана с UINavigationController, или вам нужна статическая UIToolbar с вашим контентом.

В качестве альтернативы вы могли бы сделать то, на что ссылается @MartinMoizard, который является подклассом UIViewController. Я предоставил образцы для обоих ниже. Приветствия!

 public class MyToolbar : UIToolbar
{
    public MyToolbar()
        : base()
    {
        var myTitle = MyCustomUIlabel();
        var myButton = MyCustomUIButton();

        this.SetItems(new UIBarButtonItem[] { 
        myTitle, 
        new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
        myButton });
    }
}


public class MyViewController : UIViewController
{
    public MyViewController()
        : base()
    {
    }

    public override void ViewDidLoad()
    {
        //
        // .. setup your code hurr' dawg
        //

        this.NavigationItem.RightBarButtonItem = myRightButton;
        this.NavigationItem.Title = "My Title";
    }
}
 

Комментарии:

1. спасибо за примеры! я думаю, что буду следовать подходу @MartinMoizard, потому что мне все еще нужна кнопка «Назад», доступная на контроллере навигации.