UINavigationBar后退按钮在某些设备或模拟器上显示“后退”标题,在其他设备或模拟器上显示先前的视图控制器标题

时间:2014-02-05 13:54:31

标签: ios objective-c ios7 uinavigationbar

我有一个带有导航栏的应用程序,可以从一个视图控制器导航到下一个视图控制器。 在某些模拟器和设备上导航到下一个视图控制器时,后退按钮标题为“后退”,在某些模拟器和设备上,后退按钮标题是第一个视图控制器的标题。

我真的很想明白为什么?

这不是更改后退按钮上的文本的问题。问题是在某些模拟器和设备上我看到了“后面”标题,在一些模拟器和设备上,我看到了前一个控制器的标题。 测试了20多个模拟器和设备。

以下是代码:

App Delegate

#import "AppDelegate.h"
#import "FirstViewController.h"
#import "SecondViewController.h"

@interface AppDelegate ()
@property (nonatomic, strong) UINavigationController *navigationController;
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   FirstViewController *firstViewController = [[FirstViewController alloc]
                                              initWithNibName:nil
                                              bundle:nil];

    self.navigationController = [[UINavigationController alloc]
                                 initWithRootViewController:firstViewController];

    self.window = [[UIWindow alloc]
                   initWithFrame:[[UIScreen mainScreen]bounds]];

    self.window.rootViewController = self.navigationController;

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];


    return YES;
}

第一视图控制器

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()
@property (nonatomic, strong) UIButton *btnDisplaySecondViewController;
@end

@implementation FirstViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


-(void)performDisplaySecondViewController:(id)paramSender{
    SecondViewController *secondControllrt = [[SecondViewController alloc]
                                              initWithNibName:nil bundle:nil];
    [self.navigationController pushViewController:secondControllrt
                                         animated:YES];
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"First Controller";

    self.btnDisplaySecondViewController = [UIButton
                                           buttonWithType:UIButtonTypeSystem];

    [self.btnDisplaySecondViewController
     setTitle:@"Display Seconf View Controller"
     forState:UIControlStateNormal];

    [self.btnDisplaySecondViewController sizeToFit];

    self.btnDisplaySecondViewController.center = self.view.center;

    [self.btnDisplaySecondViewController addTarget:self
                                            action:@selector(performDisplaySecondViewController:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.btnDisplaySecondViewController];


    UIImageView *imageView =
    [[UIImageView alloc]
     initWithFrame:CGRectMake(0.0, 0.0, 100.0f, 40.0f)];

    imageView.contentMode = UIViewContentModeScaleAspectFit;

    UIImage *image = [UIImage imageNamed:@"ios7_0135"];

    [imageView setImage:image];

    self.navigationItem.titleView = imageView;
}

第二视图控制器

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Second Controller";
}

5 个答案:

答案 0 :(得分:4)

当您设置当前视图控制器的标题时,当您移动到下一个视图控制器时,它将自动设置在导航栏中的Back位置。如果您未设置当前视图控制器的标题,则iOS会自动显示Back标题。

要设置视图控制器的标题,请使用以下代码:

self.title = @"<title>";

我想你会从解释中得到这个。

答案 1 :(得分:2)

这是一个老问题,但我在一秒前发现了同样的问题。对我来说,这是展示空间的问题。在我的iPhone 5上,纵向,我得到了短片&#34; Back&#34;文字,如果我旋转视图,它将显示之前的&#39;控制器标题。

答案 2 :(得分:1)

iOS6和iOS7中存在不同的行为。在iOS7中,如果第一个控制器的长度超过11个字符,则第一个控制器的标题将更改为“返回”(在第二个VC中的左侧navigationItem)。在iOS6中,navBar的标题被截断和/或后面项目的标题。

答案 3 :(得分:0)

嗨,你可以检查一下如果您的问题已经解决,请向上检查,以便从中获益。

When my app returns from gallery, it has the navbar's standard colors

答案 4 :(得分:0)

此外,如果要将后退按钮的名称更改为与上一个视图控制器标题的名称不同,可以通过在控制器的导航项上创建自定义后退按钮项目来实现此目的。导航控制器堆栈:

custom UIBarButtonItem for back button

Apple's reference here for backBarButtonItem