iOS:添加到UIAlertView的GestureRecognizer不会调用它的动作

时间:2014-04-07 18:08:05

标签: ios iphone objective-c uigesturerecognizer uialertview

我有一个UIAlertView几秒钟后被计时器解雇。有些用户只想通过点击警报视图本身来解除警报视图 因此,我尝试向alertView添加单击手势识别器,但未调用其操作。然后我在SO上读到警报视图必须在视图层次结构中才能添加手势识别器。我不确定这一点,但无论如何我因此将手势识别器添加到警报视图委托方法didPresentAlertView:,但仍未调用该操作。
这是我的代码。任何帮助表示赞赏。

警报视图的初始化:

alertView = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
}
[alertView performSelectorOnMainThread:@selector(show) withObject:self waitUntilDone:NO];
[self performSelector:@selector(dismissAlertAfterDelay:) withObject:alertView afterDelay:4.0];

添加手势识别器的委托方法:

- (void)didPresentAlertView:(UIAlertView *)alertView{
    alertView.userInteractionEnabled = YES;
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(dismissAlert:)];
    singleTap.numberOfTapsRequired = 1;
    [alertView addGestureRecognizer:singleTap];
}

以及未调用的操作方法:

-(void)dismissAlert:(UITapGestureRecognizer *)sender{
    UIAlertView *alertView = (UIAlertView *)sender.view;
    [alertView removeFromSuperview];
}

我知道警报视图显示在一个单独的窗口中,但我相信添加到其中的手势识别器应该在为警报视图启用用户交互时调用操作方法。
有什么建议吗?

1 个答案:

答案 0 :(得分:1)

UIAlertView,尽管其名称以View结尾,但却是iOS 7中的模型类。它永远不会被添加到视图层次结构中。这就是为什么添加子视图也不起作用的原因:它们被添加,但它们的父视图不在视图层次结构中。显示警报时显示的视图层次结构是私有的,不会被混淆。

我建议只使用一个关闭按钮来关注HIG。如果您确实希望能够点击整个警报,请查看SDCAlertView。它是我编写的UIAlertView克隆,它的确像一个真实的视图。