仅为子视图启用用户交互。

9

我有一个视图和 view.UserInteractionenabled = no,添加了一个按钮到视图中。我只需要点击这个按钮,是否有可能只为按钮启用交互。

1个回答

13

除非对于视图和其所有父视图都设置了userInteractionEnabledYES,否则该视图无法接收触摸事件,直到达到UIWindow对象。

您可以创建一个UIView的子类来包含按钮,并通过重写hitTest:withEvent:方法使其忽略按钮外部的触摸事件。 例如:

@interface MyView : UIView

@property (nonatomic, strong) IBOutlet UIButton *button;

@end


@implementation MyView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *subview = [super hitTest:point withEvent:event];
    return subview == self.button ? subview : nil;
}

@end

如果在父视图中有一个按钮,而该按钮正好位于其子视图中的按钮下方(例如打开在某个父视图上方的任何菜单),那么如果您点击子视图中的按钮并仅检测到它,它仍将触发父视图中的按钮,这种情况下是无法帮助解决问题的。 - Curnelious

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接