Сделать заголовок элемента навигации на левой панели таким же, как заголовок предыдущего представления.

В моем 1st VC (postVC) у меня есть приведенный ниже код, чтобы изменить заголовок панели навигации на имя пользователя:

// Set nav bar items.
[self.navigationController setNavigationBarHidden:NO animated:NO];
NSString *title = [NSString stringWithFormat:@"@%@'s Posts",[userPassed username]];
self.navigationItem.title = title;

Однако здесь есть небольшая проблема: когда я вызываю 2nd VC(detailVC) этим методом (push VC), заголовок элемента левой кнопки панели в 2nd VC показано "назад", но я ожидаю, что его заголовок будет следовать за заголовком в предыдущем VC (1st VC).

- (void) didSelectItemFromCollectionView:(NSNotification *)notification
{
    NSDictionary *cellData = [notification object];
    if (cellData)
    {
        if (!self.detailViewController)
        {
            self.detailViewController = [[PAWUserPostsDetailViewController alloc] initWithNibName:@"PAWUserPostsDetailViewController" bundle:nil];
        }
    self.detailViewController.detailItem = cellData;
    [self.navigationController pushViewController:self.detailViewController animated:YES];
    }
}

Если я изменюсь

 self.navigationItem.title = @"test";

он работает так, как ожидалось. В 2nd VC заголовок элемента левой кнопки панели отображается как «тест», как я и хотел. Итак, чтобы быть ясным, мой вопрос заключается в том, как сделать так, чтобы заголовок элемента левой панели соответствовал заголовку предыдущего VC, который зависит от имени пользователя.


person SanitLee    schedule 23.12.2014    source источник
comment
затем передайте свои данные из 1-го VC во 2VC, одновременно нажимая VC.   -  person Dharma    schedule 23.12.2014
comment
@ user1478 Я тоже думал об этой идее. Я передал имя пользователя второму VC и установил там элемент панели навигации, но это не сработало. Или, возможно, я неправильно понял ваш комментарий. Пожалуйста, порекомендуйте.   -  person SanitLee    schedule 23.12.2014
comment
@ SanitLee см. мой пост с ответом   -  person Dharma    schedule 23.12.2014


Ответы (3)


В файле postVC.h

@property (strong, nonatomic)NSString*title;

В файле postVC.m

title = [NSString stringWithFormat:@"@%@'s Posts",[userPassed username]];
self.navigationItem.title = title;
self.detailViewController.newtitle=self.title; 
[self.navigationController pushViewController:self.detailViewController animated:YES];

Подробно файл VC.h

  @property (strong, nonatomic) NSString*newtitle;

Подробно файл VC.m

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:newtitle style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
person Dharma    schedule 23.12.2014
comment
Основываясь на вашем ответе, я внес некоторые изменения: В postVC.m '//во время вызова 2-го VC (detailVC) self.detailViewController.newtitle=self.title1; [self.navigationController pushViewController:self.detailViewController анимированный:YES];' ПодробноVC.m 'self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:newtitle style:UIBarButtonItemStylePlain target:self action:@selector(back:)];' Пожалуйста, помогите отредактировать свой ответ, чтобы я принял его. Кроме того, ваш код вызывает ошибку, но это не имеет значения, потому что для меня идея есть. Спасибо:-) - person SanitLee; 24.12.2014

Это тренировка, хотя, наверное, не самая эффективная:

Создайте свойство в файле заголовка PAWUserPostsDetailViewController.

@property (strong, nonatomic) NSString *backButtonTitle; 

Затем вернитесь в свой контроллер представления, где вы выбираете строку и помещаете ее в метод didSelectItem:

NSString *backTitle = [NSString stringWithFormat:@"@%@'s Posts",[userPassed username]];

PAWUserPostsDetailViewController *detailVC = [[PAWUserPostsDetailViewController alloc] initWithNibName:@"PAWUserPostsDetailViewController" bundle:nil];;
detailVC.backButtonTitle = backTitle;

Затем вернитесь в свой PAWUserPostsDetailViewController.m и установите его, как обычно:

self.navigationItem.title = backButtonTitle;
person soulshined    schedule 23.12.2014

Сначала попробуйте это:

NSString *title = [NSString stringWithFormat:@"@%@'s Posts",[userPassed username]]; 

// If it`s to long try this:
    if ([title length] > 7)
{
    title = [title substringWithRange:NSMakeRange(0, 6)];
}
self.title = title;

Нет никаких причин, по которым первый вариант не работает, но вот другой вариант:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

    if ([title length] > 7)
{
    title = [title substringWithRange:NSMakeRange(0, 6)];
}
backButton.title = title;
self.navigationItem.backBarButtonItem = backButton;

Becarfuly, если заголовок слишком длинный, имя кнопки будет возвращено,

person Onik IV    schedule 23.12.2014