本地化的UITabBarItem"返回"标题

Dej*_*ell 5 iphone localization objective-c uinavigationcontroller ios7

当UINavigationController中前一个UIViewController的文本太长时,UITabBarItem显示"Back"

在我的应用程序中,我允许用户通过以下代码更改语言:

[[NSUserDefaults standardUserDefaults] setObject:locale forKey:@"locale"];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:locale, nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

locale将是"en"或"es"等.

我还在后台文本中添加了可本地化的文件.我看到当用户打开应用程序时,它会根据可本地化文件中的文本显示"返回".但是如果用户使用上面的代码更改语言,他将需要重新启动应用程序以使AppleLanguages包中的更改生效.

我还需要UIPickerController上的文本,例如Remove

如何修复以便用户在设置区域设置后无需重新启动应用程序?

Aar*_*ger 0

在视图控制器上,您可以手动将“后退”文本设置为您喜欢的任何内容:

\n\n
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]\n                                           initWithTitle:NSLocalizedString(@"Back", nil)\n                                           style:UIBarButtonItemStyleBordered\n                                           target:nil action:nil];\n\n[self.navigationItem setBackBarButtonItem: backButton];\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果用户更改语言,只需再次运行代码即可重置后栏按钮项目。

\n\n

我建议在抽象子类中执行此操作,这样您就不需要在任何地方执行此代码。

\n\n
\n

如果 UIImagePicker 文本需要相同的内容怎么办?

\n
\n\n

UIImagePickerController是一个子类UINavigationController,因此:

\n\n
UIImagePickerController *imagePicker = //make your image picker\xe2\x80\xa6\nimagePicker.delegate = self;\n\n- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {\n    UIViewController *vc = [[navigationController viewControllers] lastObject];\n    [vc.navigationItem setBackBarButtonItem: backButton];\n}\n
Run Code Online (Sandbox Code Playgroud)\n