Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 视图不';切换视图时不会消失_Iphone_Objective C_Cocoa Touch_Uitableview - Fatal编程技术网

Iphone 视图不';切换视图时不会消失

Iphone 视图不';切换视图时不会消失,iphone,objective-c,cocoa-touch,uitableview,Iphone,Objective C,Cocoa Touch,Uitableview,我正在调用turnView方法,该方法必须获取dissapear menuView(当前)并可能显示adjustView。调用该方法时,将执行该方法,但不会出现错误,但不会切换视图,menuView将保留该方法,并返回到方法调用的下一行。如何解决?谢谢 来自menuView的电话: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ab

我正在调用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;}
    }

}
方法在控制器上实现,为menuView类定义了menuController:

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

您的代码中存在一些主要的概念性问题,让我尝试逐一解决这些问题:

didSelectRowAtIndexPath:

无论选择哪一行,都将创建新的视图控制器。您应该只在需要时创建它。另外,if和switch语句非常复杂,难以阅读

调用委托方法

方法
视图将出现:
视图消失:
等。这些方法用于捕捉这些事件,而不是自己调用它们。这在某些情况下可能有意义,但它们在动画块中绝对没有效果

带有块的动画,或使用内置动画

您应该使用新的块语法制作动画。然而,只要切换到下一个视图,您就可以使用苹果的官方API,而无需编写自己的动画

因此,

您可以通过调用
[self dismissModalViewControllerAnimated:YES]
摆脱控制器,动画将自动转到另一个方向

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