Не могу изменить заголовок кнопки назад, но я могу скрыть это - PullRequest
5 голосов
/ 14 февраля 2012

Я разрабатываю приложение iPhone с последним SDK и XCode 4.2

Я использую UINavigationController, и чтобы показать новый ViewController, я делаю это на AppDelegate.m:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
        {
            self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
        }
        else
        {
            self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
        }
        self.viewController.title = NSLocalizedString(@"MAIN", nil);

        navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
        navController.navigationBar.tintColor = [UIColor darkGrayColor];

        self.window.rootViewController = navController;
        [self.window makeKeyAndVisible];
        return YES;
    }

    - (void) openDocumentation
    {
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
        {
            docViewController = [[DocumentationViewController alloc] initWithNibName:@"DocumentationViewController_iPhone" bundle:nil];
        }
        else
        {
            docViewController = [[DocumentationViewController alloc] initWithNibName:@"DocumentationViewControllerr_iPad" bundle:nil];
        }
        docViewController.title = NSLocalizedString(@"DOCUMENTATION", nil);
self.viewController.navigationItem.backBarButtonItem.title = @"Back";
        [navController pushViewController:docViewController animated:YES];
    }

Вкл. DocumentationViewController.m Я делаю это:

- (void) viewWillAppear:(BOOL)animated
{
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                   style:UIBarButtonItemStylePlain target:nil action:nil];
    self.navigationItem.backBarButtonItem = backButton;
}

Но это не меняет заголовок кнопки назад.

Я перемещаю этот код в viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                   style:UIBarButtonItemStylePlain target:nil action:nil];
    self.navigationItem.backBarButtonItem = backButton;
}

- (void) viewWillAppear:(BOOL)animated
{

}

Но все равно не работает.

И это тоже не работает:

- (void) viewWillAppear:(BOOL)animated
{
    self.navigationItem.backBarButtonItem.title = @"Back";
}

Но если я сделаю это, чтобы проверить, не могу ли я получить доступ к кнопке возврата:

- (void) viewWillAppear:(BOOL)animated
{
    self.navigationItem.hidesBackButton = YES;
}

Работает !! И прячет кнопку назад.

Что я делаю не так?

Ответы [ 5 ]

19 голосов
/ 14 февраля 2012

Название кнопки «Назад», отображаемое UINavigationViewController, не зависит от navigationItem.backBarButtonItem.title самого верхнего контроллера вида в стеке.Это зависит от значения второго верхнего вида контроллера navigationItem.backBarButtonItem.title.

Таким образом, вам нужно установить navigationItem.backBarButtonItem.title для того, что контроллер представления показывает, когда вы нажимаете на DocumentViewController.

6 голосов
/ 16 февраля 2012

Этот туториал покажет мне, как решить проблему:

http://rafaelsteil.com/crappy-ios-apis-uinavigationcontroller/

2 голосов
/ 08 августа 2013

Когда вы устанавливаете заголовок backBarButtonItem для UIViewController, вы фактически устанавливаете заголовок для кнопки назад, если этот UIViewController является вторым контроллером в стеке UINavigationController.

self.navigationItem.backBarButtonItem.title = @"Custom Title";

Таким образом, если вышеуказанный контроллер вида уже находится в навигационном контроллере и впоследствии помещает дочерний контроллер вида в навигационный контроллер, заголовок кнопки «Назад» будет «Пользовательское название».

1 голос
/ 08 августа 2013

Просто добавьте в файл раскадровки или пера свою пользовательскую кнопку (это заменит кнопку навигации) и добавьте для нее действие возврата:

- (IBAction)back:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}

Для меня это позволяет настроить мою кнопку назад.

0 голосов
/ 04 июля 2014

На самом деле вы можете сделать это с помощью одного трюка:

Переопределить класс UINavigationBar и добавить следующую строку кода:

- (void)layoutSubviews{
    self.backItem.title = @"";
    [super layoutSubviews];
}

Затем инициализируйте свой UINavigationController с помощью этого пользовательского класса UINavigationBar ... и т. Д..

UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil]

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...