1

言語選択オプションのsegmentedControlである次のコードがあります。ケース0は英語用で、ケース1はギリシャ語用で、その後に渡されますUITextView。問題は、ケース1または0のボタンを押すたびに、テーブルビューコントローラーである前のビューコントローラーに戻り、正しい言語を表示するために「detailViewController」に戻る必要があることです。ビューコントローラ間を行ったり来たりせずにこれを行う方法はありますか?小さなアニメーションや、の更新または再読み込みメソッドのようなものUITextView

 int a;

- (IBAction)languageSeg:(id)sender {

switch (((UISegmentedControl *)sender).selectedSegmentIndex) {

 case 0:

 a=0;

        break;

    case 1:
        a=1;

        break;

    default:

        break;
}
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}


-(void) viewWillAppear:(BOOL)animated{

[super viewWillAppear:YES];


UIImage *saladImage = [UIImage imageNamed:@"salad.jpg"];

UIImage *fishImage = [UIImage imageNamed:@"fish.jpg"];

 [textDetail setScrollEnabled:YES];

 [textDetail setContentSize:CGSizeMake(320, 190)];


//Switch the UIImages and UILabel based on item



switch (itemNumber) {
    case 0:
        itemName.text = @"Salad";
        itemPic.image = saladImage;
        self.title = @"Salads";

        if (a==0){

            textDetail.text = @"description in english";

        }

        if (a==1){

            textDetail.text = @"description in greek";
        }

        break;


      case 1:

       // etc.
4

3 に答える 3

1

言語セレクター付きのアプリがあり、NSUserDefaultsを使用しています。チャームのように機能します。ピッカーを備えたViewControllerの場合:

- (IBAction)languageSeg:(id)sender {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

switch (((UISegmentedControl *)sender).selectedSegmentIndex) {

    case 0:

       [defaults setInteger:0 forKey:@"language"];
        break;

    case 1:

        [defaults setInteger:1 forKey:@"language"];
        break;

    default:

        break;
}
}

そしてvieWillAppear、言語を表示しているviewControllerで:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([defaults integerForKey:@"language"] == 0) {
        textDetail.text = @"description in english";

    }else{
        textDetail.text = @"description in greek";
    }

ここで、このviewDidLoadメソッドでは、次のように、ユーザーがまだ値を設定していない場合は、デフォルト値を指定する必要があります(ここでも、ピッカービューではなく、設定を表示するビューコントローラーで)。

 if (![defaults integerForKey:@"language"]) {
        [defaults setInteger:0 forKey:@"language"];
    }

textDetail.text = @"description in english";
于 2012-08-11T13:47:03.633 に答える
1

viewWillAppear で最初に設定したのと同じ方法で、languageSeg: メソッドで textView のテキストを更新できます。

言語の切り替えを処理する別のメソッドを作成し、そのメソッドを viewWillAppear と languageSeg の両方、および必要な場所から呼び出します。

たとえば、言語セッター メソッドには、現在 viewWillAppear の下部にあるコードが含まれます。

- (void) languageSetter {

    switch (itemNumber) {
       case 0:
            itemName.text = @"Salad";
            itemPic.image = saladImage;
            self.title = @"Salads";

            if (a==0){
                textDetail.text = @"description in english";
            }
            if (a==1){
               textDetail.text = @"description in greek";
            }
      break;

      case 1:
        // etc.
      break;

      default:
      // default case
      break;
    }
}

次に、viewWillAppear: メソッドは次のようになります。

-(void) viewWillAppear:(BOOL)animated{

     [super viewWillAppear:YES];
     UIImage *saladImage = [UIImage imageNamed:@"salad.jpg"];
     UIImage *fishImage = [UIImage imageNamed:@"fish.jpg"];

     [textDetail setScrollEnabled:YES];
     [textDetail setContentSize:CGSizeMake(320, 190)];

     [self languageSetter];
}

languageSeg: メソッドは次のようになります。

- (IBAction)languageSeg:(id)sender {

    switch (((UISegmentedControl *)sender).selectedSegmentIndex) {

       case 0:
           a=0;
           break;

       case 1:
           a=1;
           break;

       default:
           break;
    }

    [self languageSetter];
}

多くの実装は、残りのコードの設定方法と個々のニーズに依存しますが、これは一般的な考え方です。

于 2012-08-11T12:55:02.723 に答える
0

ゴットはどこでswitch (itemNumber)呼び出されますか?

viewDidLoadまたはなどのメソッド内にあるviewWillAppear場合、このビューが表示されたときにのみ呼び出されます。

この部分をメソッドとして抽出し、 に入れる必要がある場合があります(IBAction)languageSeg:(id)sender。例えば:

- (void)updateView
{
    switch (itemNumber) {
    case 0:
    itemName.text = @"Salad";
    itemPic.image = saladImage;
    self.title = @"Salads";

    if (a==0){

        textDetail.text = @"description in english";

    }

    if (a==1){

        textDetail.text = @"description in greek";
    }

    break;


  case 1:

   // etc.
}

次に、このメソッドをswitch ブロック内viewDidLoadおよびその後で呼び出します。 languageSeg:

于 2012-08-11T12:45:40.887 に答える