分段控件和文本视图刷新/重新加载 - xcode



>我有以下代码,它是语言选择选项的分段控件。案例 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.

您可以在 languageSeg: 方法中更新文本视图的文本,就像您最初在 viewWillT出現中设置它的方式一样:

我将创建一个单独的方法来处理语言切换,然后从 viewWillSeem 和 languageSeg 以及您需要它的任何其他位置调用该方法。

例如,您的语言设置器方法将包含当前位于 viewWillSeem 底部的代码:

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

你的语言Seg:方法看起来像这样:

- (IBAction)languageSeg:(id)sender {
    switch (((UISegmentedControl *)sender).selectedSegmentIndex) {
       case 0:
           a=0;
           break;
       case 1:
           a=1;
           break;
       default:
           break;
    }
    [self languageSetter];
}

很多实现将取决于其余代码的设置方式和您的个人需求,但这是一般的想法。

我有一个带有语言选择器的应用程序,我使用 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;
}
}

在视图控制器显示语言的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";
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:调用此方法。

最新更新