禁用视图上的触摸

时间:2013-11-26 07:14:58

标签: ios objective-c uitouch

您好我有一个 UIView ,他的alpha是0.7,而下面是 UITextFields 。我不希望它在保持触摸事件的同时调用触摸事件。我尝试使用

[lightBoxView setUserInteractionEnabled:NO];

但现在 UITextFields 可以变为活动状态或第一响应者。如何禁用它来调用触摸事件以及不将触摸传递给其他人?

2 个答案:

答案 0 :(得分:1)

您可以从严格的手势委托方法中删除这些控件。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[UITextFiled class]])
    {
        return NO;
    }
    else
    {
        return YES;
    }
}

答案 1 :(得分:1)

您还需要为所有子视图设置userInteractionEnabled = NO

试试这个,

[[lightBoxView subviews] makeObjectsPerformSelector:@selector(setUserInteractionEnabled:)
                          withObject:[NSNumber numberWithBool:NO]];

这会在setUserInteractionEnabled:的所有直接子视图上调用lightBoxView,并将其设置为NO。对于更复杂的子视图层次结构,您必须递归遍历所有子视图并禁用每个子视图上的用户交互。为此,您可以在UIView类别中编写递归方法。有关此类别方法的更多详细信息,请查看this answer

希望有所帮助!