2013-11-15 92 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

相關問題