Отдельный заголовок в NavigationBar и кнопки навигации - PullRequest
2 голосов
/ 17 марта 2011

Эй, у меня есть стек UIViewController с UINavigationController. Обычно заголовок (или заголовок NavigationItem) решает как заголовок, отображаемый на панели навигации (отображается вверху) , так и все кнопки навигации, например кнопки возврата на панели навигации. сам по себе.

Теперь я планирую поместить немного больше информации в заголовок NavigationBar, но при этом держать ярлыки этих кнопок короткими и краткими (например, заголовок представления « Overview», тогда как кнопки должны просто показать «Обзор»).

В настоящее время я пытаюсь добиться этого, изменив заголовок NavigationItem на ViewWillAppear и ViewWillDisappear. Это хорошо работает, но можно увидеть моменты, когда текст меняется (возможно, из-за анимации). Я также пробовал разные комбинации с ViewDidAppear и ViewDidDisappear, но эффект был лучшим только при использовании методов Will. Пример кода для этого показан ниже (класс Example передается в UINavigationController).

Есть ли лучший способ добиться этого? Может быть, простым изменением заголовков кнопок only или просто прямым изменением заголовка навигации? Или я могу не позволить стандартным механизмам копировать заголовок во все другие экземпляры?

public class Example : UIViewController
{
    private int depth;

    public Example ( int depth = 0 )
    {
        this.depth = depth;
        this.Title = "Title";
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad();

        UIButton btn = new UIButton( new RectangleF( 100, 100, 300, 50 ) );
        btn.SetTitle( "Duplicate me!", UIControlState.Normal );
        btn.TouchDown += delegate(object sender, EventArgs e) {
            NavigationController.PushViewController( new Example( depth + 1 ), true );
        };
        View.Add( btn );
    }

    public override void ViewWillAppear ( bool animated )
    {
        base.ViewWillAppear( animated );
        this.NavigationItem.Title = String.Format( "Title / {0}", depth );
    }

    public override void ViewWillDisappear ( bool animated )
    {
        base.ViewWillDisappear( animated );
        this.NavigationItem.Title = "Title";
    }
}

1 Ответ

4 голосов
/ 17 марта 2011

Если я вас правильно понимаю, я думаю, что для этого есть готовый вариант:

Установите backBarButtonItem для элемента навигации контроллера представления.

...