2013-11-15 90 views
2

我想知道如何更新具有nib文件和UITableview作为子视图的viewControllers,而我更改设置应用程序页面的语言设备语言。我可以考虑在这种情况下使用NSNotificationCenter,但同时我也需要考虑更新表格单元格的标签。我不能或不愿意重新加载表,因为我在cellForRowAtIndexPath方法中做了很多事情,因为表中有很多数据。使用委托方法也是一个问题。任何人可以建议/帮助我如何解决这个问题,无需重新加载表视图。更新应用程序内语言更改后的所有UIViewController

+0

关于本地化的搜索...它建在好友中,你不需要做任何事情 – amar

+0

感谢@amar的回复。我只想在我的应用程序中更改语言,而不是在设备中。因此,当用户在应用程序中选择语言时,它应该反映在所有视图控制器中,为此,我在所有ViewController类中都使用了NSNotificationCenter。因此,在语言选择后会立即发生更改在应用中。所以我的问题是如何表格单元名称出重新加载表视图。任何帮助将不胜感激。 – Amit89

+0

嗨我在我的应用程序中做了同样的事情,在plist中放入多种语言,然后在全局变量的基础上从中获取它。你也可以定义一个宏LocalisedString(<密钥在这里>)使用这个每一个。如果你需要代码注释但需要一些时间。 – amar

回答

0

对于定制本地化做到这一点(这个答案是具体到这个问题不是本地化的替代)

使您的定义文件中的宏。如果你还没有一个然后

添加新文件 - >将其命名为Defines.h - >删除它的.m->删除它的.h-中的所有东西。>将其导入到.pch中。

现在它LOCALISEDSTRING(m) [[[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Language" ofType:@"plist"]] objectAtIndex:globalIntIndex]objectForKey:m]

你“globalIntIndex”也在defines.h宣布将其与每种语言的适当indexvalue定义一个宏。

现在添加一个plist文件并将其命名为“语言”,将它作为数组元素添加到它的语言中,并在每种语言中添加字符串值为KEY的KEY。重点将是同为每种语言

enter image description here

的plist看起来就像上面图片放在项目0和俄文文本的所有英文文本中第1项

现在你可以,如果使用它像NSLog(@"%@",LOCALISEDSTRING(@"KEY")); globalIntIndex = 0,那么它将以英文打印字符串,否则它将以俄语打印字符串。

+0

感谢您的建议,它的工作。现在我的疑问是,假设有三个ViewController命名为A,B,C。在C ViewController中有一个选项可以改变languge,在改变它之后,所有三个ViewController都需要改变标签,textField,按钮,表格的单元格文本等所有UI部分。如果我按照你的想法实现它,它不会更新。 – Amit89

+0

您需要在视图中设置文本才会出现方法。 – amar

+0

这是问题,因为我有很多数据在表视图,所以如果我重新加载表视图更新tableView性能问题将前面。所以其他方式更新.. – Amit89

0

如果你想瞬间改变你现在的语言,你应该在你自己的代码上实现多种语言。通常是一个类来处理与你的界面一起显示的所有字符串。为每个控制器推荐处理语言更改的通知。

您可以使用:

[[NSUserDefaults standardUserDefaults] 
     setObject:[NSArray arrayWithObjects:@"en", nil] 
     forKey:@"AppleLanguages"]; 

设置你现在的语言,但它可能不会立即改变,也并不推荐使用。

+0

语言改变是基于我的应用程序中的语言选择发生的,我的疑问是如何更改表视图的单元名称,而无需调用cellForRowAtIndexPath方法和所有UI部分。我正在使用NSSNotificationCenter来更新ViewControllers。 – Amit89

+0

@Amit89通知不建议它添加额外的代码使用一个宏,凡你将使用通知我已经在我的答案给出了一个示例,如果不清楚。 – amar

相关问题