切换视图时视图不会消失

时间:2011-08-28 16:53:29

标签: iphone objective-c cocoa-touch uitableview

我正在调用turnView方法,他必须获得dissapear 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];
}

1 个答案:

答案 0 :(得分: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]来摆脱控制器,动画将自动转向另一个方向。