2012-08-11 21 views
1

我有下面的代碼是一個語言選擇選項segmentedControl。情況0是英語,情況1是希臘語,然後傳遞給UITextView。問題是,每次按下case 1或0的按鈕時,我都必須返回到前一個視圖控制器,它是一個表視圖控制器,然後返回到「detailViewController」,以顯示正確的語言。有沒有辦法做到這一點,而無需在視圖控制器之間來回切換?對於UITextView,就像是一個小動畫或刷新或重新加載方法。segmentedControl和TextView刷新/重載 - xcode

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. 

回答

1

您可以更新在languageSeg TextView的文本:方法您最初設置它在viewWillAppear中以同樣的方式:我想創建一個處理語言切換一個單獨的方法

,然後調用該方法從兩個viewWillAppear中和languageSeg以及你需要的任何地方。

例如,你的語言setter方法將目前包括代碼在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]; 
} 

很多實現方法on將取決於你的代碼的其餘部分是如何設置的以及你的個人需求,但這是一般的想法。

+0

你能舉個例子嗎?謝謝.. – snksnk 2012-08-11 15:00:55

+0

添加了一些代碼供您檢查。 – BJHStudios 2012-08-11 15:58:50

+0

完美!謝謝!!它的工作原理,但我不得不將uiimage傳回 - (void)languageSetter,因爲它沒有被識別。當我回到表視圖並回到viewController時,分段控件不會「記住」我以前的選擇,但該文本已經切換到該文本。例如當我按希臘語(希臘語描述和希臘語按鈕都是「開」)時。但當我來回再次按鈕突出顯示英文和文本是在希臘語..我如何使分段控制記住我的選擇?再次感謝!! – snksnk 2012-08-12 07:10:09

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:開關塊之後。

+0

其中在視圖中會出現..你能給我一個例子嗎? – snksnk 2012-08-11 15:00:09

+0

我編輯了一下。 – Selkie 2012-08-11 15:28:22

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

仍然一樣..我必須返回到表視圖並選擇單元格以便設置語言。我的問題並不是它沒有改變,但我不會必須來回去看看效果的控制者..謝謝 – snksnk 2012-08-11 14:59:15