segmentedControl和TextView刷新/重新加载 - xcode

时间:2012-08-11 12:26:58

标签: objective-c ios uitextview selection uisegmentedcontrol

我有以下代码,它是用于语言选择选项的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.

3 个答案:

答案 0 :(得分: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];
}

许多实现将取决于您的代码的其余部分是如何设置的以及您的个人需求,但这是一般的想法。

答案 1 :(得分: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;
}
}

在viewController中vieWillAppear显示语言:

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";

答案 2 :(得分:0)

switch (itemNumber)在哪里被召唤?

如果它在viewDidLoadviewWillAppear等方法中,则仅在此视图显示时调用。

您可能需要将此部件作为方法提取,并将其放在(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.
}

然后在切换块之后在viewDidLoad languageSeg:中调用此方法。