2011-08-28 62 views
0

我正在調用turnView方法,它必須得到不可見的menuView(當前)並可能顯示adjustView。當方法被調用時,它被執行時沒有錯誤,但不切換視圖,menuView保持不變,並且它返回到以下的方法調用行。如何解決它?從menuView感謝切換視圖時視圖不會消失

電話:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    aboutTabController * myObject = [[aboutTabController alloc] init]; 

    if (indexPath.section == 1) { 

     switch (indexPath.row) { 
      case 0: 
       [myObject turnView]; 
       break; 
      case 1: 
       // 
       break; 
      default: 
      break;} 
    } 

} 

方法的控制器來實現,menuController是爲menuView類中定義:

- (void) turnView 

{ 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; 

    if (self.adjustController == nil) 
    { 
     adjustView *aController = [[adjustView alloc] initWithNibName:@"adjustView" bundle:nil]; 
     self.adjustController = aController; 
     [aController release]; 
    } 

    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 

    [self.menuController viewWillDisappear:YES]; 
    [self.adjustController viewWillAppear:YES]; 

    [self.menuController.view removeFromSuperview]; 
    [self.view insertSubview:adjustController.view atIndex:0]; 

    [self.menuController viewDidDisappear:YES]; 
    [self.adjustController viewDidAppear:YES]; 

    [UIView commitAnimations]; 
} 

回答

0

有在你的代碼中的一些主要的概念問題,讓我嘗試地址他們一個接一個:

邏輯在didSelectRowAtIndexPath:

您正在創建新的視圖控制器,無論選擇哪一行。您只應在需要時創建它。另外你如果和switch語句非常複雜,難以閱讀。

調用委託方法

方法viewWillAppear:viewDidDisappear:等在那裏讓你捕獲這些事件,不給自己打電話給他們。這在某些情況下可能有意義,但它們在你的動畫塊中絕對沒有影響。

動畫有塊,或者使用內置的動畫

你應該做你的動畫與新的塊語法。但是,只需翻到下一個視圖,您就可以使用Apple的官方API,而無需編寫自己的動畫。

因此,

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section==1 && indexPath.row==0) { 
     adjustView *aController = [[adjustView alloc] initWithNibName:@"adjustView" bundle:nil]; 
     aController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     [self presentModalViewController:aController animated:YES]; 
     [aController release]; 
    } 
} 

可以通過調用[self dismissModalViewControllerAnimated:YES]和動畫會自動在另一個方向擺脫控制器。

+0

工作,更容易,awsome :) – Ruth85