模态视图控制器不会自行解散

Jor*_*ith 33 iphone objective-c modalviewcontroller ios5

我在做什么:

在我的应用程序中,我使用以下代码呈现模态视图控制器(包含应用程序设置):

    optionsViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;
    [self presentModalViewController:optionsViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

此过渡只是卷起视图的底部以显示一些设置.(请参阅"地图"应用程序中的示例.)当您点击页面的上半部分时,原始视图仍然存在但灰显,模态视图控制器将自动关闭(由操作系统处理,我没有' t代码).

-

什么不起作用:

这在iOS 4中运行良好(我的应用程序实际上是在App Store上).但在iOS 5中,看起来苹果已经改变了这种转变的行为,视图控制器不再自我贬低.我试图复制之前由操作系统处理的行为,但无法弄清楚如何操作.

-

我尝试过的:

在选项视图的顶部添加不可见按钮不起作用.然后页面卷起了我不想要的完整方式.

除此之外,我被困住了.我应该如何复制它最初的工作方式(或者我从一开始就以错误的方式进行复制!).任何帮助深表感谢!

Maz*_*yod 71

伙计,我遇到了同样的问题..这里是我发现使用parentViewController:

请注意,从5.0开始,这将不再返回呈现视图控制器.

这是写在UIViewController的头文件中...

我正在使用ShareKit,并且modalViewController在iOS4中完美运行,但在iOS5中,它只是不会解雇自己!这是因为在他们的代码中,他们正在使用:

    [[currentView parentViewController] dismissModalViewControllerAnimated:animated];
Run Code Online (Sandbox Code Playgroud)

和parentViewController将返回nil,因为这是一个模态呈现的视图控制器...

通过寻找解决方案,我找到了你的问题..所以,我决定自己修复它:P

我将上一行更改为:

    [currentView dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.


编辑:根据您解释原始问题的方式,有两个答案.这是第二个:

在iOS5中,模态控制器似乎只在您单击卷曲时自动解散,而不是在卷曲或背景上方.在iOS5中,为了在点击背景或卷曲上方时实际获取模态视图以解除自身,我将以下代码添加到控制器,以监听模态视图上的点击,但忽略点击按钮.当使用带有页面卷曲的模态控制器时,这应该模仿iOS早期版本中的行为.

- (void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    tap.numberOfTapsRequired = 1;
    tap.numberOfTouchesRequired = 1;
    tap.delegate = self;          
    [backgroundView addGestureRecognizer:tap];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    //change it to your condition    
    if ([touch.view isKindOfClass:[UIButton class]]) {      
       return NO;
    }
    return YES;
}

- (void)handleTap:(UITapGestureRecognizer *)sender {
    [self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,这个解决方案适用于iOS 4和5 :) (2认同)

Ben*_*ieb 15

你用来解雇模态视图控制器的代码是什么?我见过这样的代码:

[self.parentViewController dismissModalViewControllerAnimated: YES];
Run Code Online (Sandbox Code Playgroud)

这不适用于所有版本的操作系统.但是,这个:

[self dismissModalViewControllerAnimated: YES];
Run Code Online (Sandbox Code Playgroud)

应该.

  • 在iOS 4中,我不需要做任何事情 - 操作系统处理它.在iOS 5中,这似乎已经改变(至少目前为止).上面的代码是我将要使用的,但我不知道如何在视图的上半部分接收触摸(然后运行此代码).请参阅"地图"应用,了解它应如何运作. (2认同)