使左侧栏按钮的导航项标题与上一个视图的标题相同

时间:2014-12-23 16:46:44

标签: ios objective-c uinavigationitem pushviewcontroller

在我的第一个VC(postVC)中,我有以下代码将导航栏标题设置为用户名:

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

然而,这里有一个问题,当我通过这种方法(推VC)调用第二个VC(detailVC)时,中的左侧栏按钮项目的标题显示第二个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";

它按预期工作。在第二个VC 中,左侧栏按钮项目的标题显示为" test"我想要的。 所以,要明确的是,我的问题是如何使左栏按钮项目的标题跟随前一个VC的标题,该标题因用户名而异。

3 个答案:

答案 0 :(得分:1)

这是一种锻炼,虽然可能不是最有效的:

在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;

答案 1 :(得分:1)

在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文件

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:newtitle style:UIBarButtonItemStylePlain target:self action:@selector(back:)];

答案 2 :(得分:0)

首先尝试这个:

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;

如果标题很长,按钮的名称将会回来,