UINavigationBar由不同的控制器设置

时间:2014-12-20 22:01:28

标签: ios objective-c uinavigationbar title

我的应用程序中发生的事情是用户登录然后控制器的标题变为“Hello(用户名)”,然后用户按下按钮并被推送到标题为“Messages”的UITableViewController。在他们选择一条消息后,他们被推送到另一个UITableViewController,标题为“Message to(receiver)”。

问题是当你按下标题为“Message to(receiver)的第二个UITableViewController上的后退按钮时,第一个UITableViewController的标题变为”Hello(Username)“而不是”Messages“。这个bug只发生了当我更新到Xcode 6时,我不知道是什么导致它。

在ViewController 1中:

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil];
    self.navigationItem.backBarButtonItem = _backButton;
    _backButton = nil; //This is to make the Back button on other viewController to read "Back"
}

-(void) viewDidLoad
{
    [super viewDidLoad];
    self.title = [[NSString alloc] initWithFormat:@"Hello %@", self.userLoggedIn];
    //Hide backbutton
    [self.navigationItem setHidesBackButton:YES animated:NO];
}

- (IBAction)messages:(id)sender
{
    TableViewController *tableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"checkForMessagesVC"];
    [self.navigationController pushViewController:tableVC animated:YES];
}

在UITableViewController 1中:

-(void)viewDidLoad
{
    self.title = @"Messages";
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ViewMessagesVC *viewMessagesVC = [self.storyboard instantiateViewControllerWithIdentifier:@"viewMessagesVC"];

    [self.navigationController pushViewController:viewMessagesVC animated:YES];
}

还有一件事是在ViewController 1中隐藏了后退按钮。然后当你转到TableViewController 1时,后退按钮会显示,但是当你转到TableViewController 2然后返回到TVC 1时,隐藏了后退按钮。 (即使你把[self.navigationItem setHidesBackButton:NO animated:NO];在TableViewController的viewDidLoad中,后退按钮仍然不会显示)

不确定是什么导致这种情况,唯一发生的事情是推动导航控制器并按下后退按钮。每个控制器都有计时器和其他事情发生,但没有任何影响标题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

所以希望没有其他人愚蠢地遇到这个奇怪的错误。出于某种原因,我的第二个TableViewController中的代码:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

导致错误