デバイス言語ではなくアプリの設定ページで言語を変更しているときに、nibファイルとUITableviewをサブビューとして持つviewControllerを更新する方法を考えています。このシナリオでは NSNotificationCenter を使用することを考えることができますが、同時にテーブル セルのラベルを更新することも考える必要があります。テーブルに多くのデータがあるため、 cellForRowAtIndexPath メソッドで多くのことを行っているため、テーブルをリロードできないか、またはリロードすることに消極的です。デリゲート メソッドを再び使用することも問題です。テーブルビューをリロードせずにこの問題を根絶する方法を誰かが提案/助けてくれますか?
3 に答える
カスタムローカリゼーションの場合はこれを行います(この回答はこの質問に固有のものであり、ローカリゼーションの代替ではありません)
定義ファイルにマクロを作成します。まだ持っていない場合
新しいファイルを追加 -> Defines.h という名前を付ける -> その .m を削除 -> その .h 内のすべてのものを削除 -> .pch にインポート
ここでマクロを定義しますLOCALISEDSTRING(m) [[[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Language" ofType:@"plist"]] objectAtIndex:globalIntIndex]objectForKey:m]
「globalIntIndex」も define.h で宣言され、各言語に適切なインデックス値を設定します。
次に、plist ファイルを追加し、「Language」という名前を付けて、言語を配列要素として追加し、各言語内に文字列値を持つ KEY を辞書として追加します。キーは各言語で同じです
Plist は上の画像のようになり、すべての英語のテキストを項目 0 に、ロシア語のテキストを項目 1 に入れます。
NSLog(@"%@",LOCALISEDSTRING(@"KEY"));
globalIntIndex=0 の場合のように使用できるようになり、文字列が英語で出力され、それ以外の場合は文字列がロシア語で出力されます。