2

デバイス言語ではなくアプリの設定ページで言語を変更しているときに、nibファイルとUITableviewをサブビューとして持つviewControllerを更新する方法を考えています。このシナリオでは NSNotificationCenter を使用することを考えることができますが、同時にテーブル セルのラベルを更新することも考える必要があります。テーブルに多くのデータがあるため、 cellForRowAtIndexPath メソッドで多くのことを行っているため、テーブルをリロードできないか、またはリロードすることに消極的です。デリゲート メソッドを再び使用することも問題です。テーブルビューをリロードせずにこの問題を根絶する方法を誰かが提案/助けてくれますか?

4

3 に答える 3

0

カスタムローカリゼーションの場合はこれを行います(この回答はこの質問に固有のものであり、ローカリゼーションの代替ではありません)

定義ファイルにマクロを作成します。まだ持っていない場合

新しいファイルを追加 -> 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 の場合のように使用できるようになり、文字列が英語で出力され、それ以外の場合は文字列がロシア語で出力されます。

于 2013-11-15T09:38:21.487 に答える