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

Objective c 分段控件和文本视图刷新/重新加载-xcode,objective-c,ios,uitextview,selection,uisegmentedcontrol,Objective C,Ios,Uitextview,Selection,Uisegmentedcontrol,我有以下代码,这是一个用于语言选择选项的分段控件。案例0表示英语,案例1表示希腊语,然后将其传递给UITextView。问题是,每次按下案例1或0的按钮时,我都必须返回到上一个视图控制器,它是一个表视图控制器,并返回到“detailViewController”,以便显示正确的语言。有没有一种方法可以在不在视图控制器之间来回切换的情况下完成此操作?类似于UITextView的小动画、刷新或重新加载方法 int a; - (IBAction)languageSeg:(id)sender {

我有以下代码,这是一个用于语言选择选项的分段控件。案例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.
调用
开关(itemNumber)
的位置在哪里

如果它是在
viewDidLoad
viewwillbeen
等方法中,则只有在显示此视图时才会调用它

您可能需要将此部分提取为方法,并将其放入
(iAction)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:
在开关块之后。

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

- (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;
    }
}
我将创建一个单独的方法来处理语言切换,然后从ViewWillDisplay和languageSeg以及任何您需要的地方调用该方法

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

- (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;
    }
}
然后您的视图将出现:方法如下所示:

-(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];
}
- (IBAction)languageSeg:(id)sender {

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

       case 0:
           a=0;
           break;

       case 1:
           a=1;
           break;

       default:
           break;
    }

    [self languageSetter];
}
您的languageSeg:方法如下所示:

-(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];
}
- (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;
}
}
在显示语言的viewController的
vieWillAppear
中:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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

    }else{
        textDetail.text = @"description in greek";
    }
现在,在
viewDidLoad
方法中,如果用户尚未设置任何值,则需要为其指定一个默认值,如下所示:(再次在视图控制器中显示设置,而不是选择器视图。)


还是一样。。我必须返回到表视图并选择单元格,以便设置语言。我的问题不是它没有改变,而是我不必来回地去控制者那里看效果。。风景中的谢谢会出现你能给我举个例子吗?太好了!谢谢虽然我不得不将uiimage传输回-(void)languageSetter,因为它没有被识别,但它仍然可以工作。。此外,当我返回到表视图和视图控制器时,分段控件不会“记住”我以前的选择,但文本已切换到该选项。例如,当我同时按下希腊文(希腊文描述和希腊文按钮为“开”)时。但是,当我来回走动时,按钮在英语中突出显示,文本是希腊文。。如何让分段控件记住我的选择??再次感谢!!很高兴我能帮忙!如果有机会,请把答案标为正确。要使分段控件正确显示,您可以通过NSUserDefaults跟踪用户的选择,也可以检查ViewWillDisplay:中textDetail中的文本,然后适当设置分段控件索引。