1

我有以下代码,它是用于语言选择选项的 segmentedControl。案例 0 用于英语,案例 1 用于希腊语,然后传递给 a 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

您可以在 languageSeg: 方法中更新 textView 的文本,方法与您最初在 viewWillAppear 中设置的方式相同:

我将创建一个单独的方法来处理语言切换,然后从 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 回答
1

我有一个带有语言选择器的应用程序,并且我使用 NSUserDefaults。奇迹般有效。在带有选择器的视图控制器中:

- (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;
}
}

vieWillAppearviewController 中显示语言:

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 回答
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 回答