Iphone 如何使未剪辑的子视图接收触摸事件?
我有一个小的自定义视图,用作按钮。我使用一个简单的Iphone 如何使未剪辑的子视图接收触摸事件?,iphone,objective-c,cocoa-touch,uibutton,Iphone,Objective C,Cocoa Touch,Uibutton,我有一个小的自定义视图,用作按钮。我使用一个简单的UIButtonTypeCustom实现了这一点,我将其作为视图边界上的子视图包含。但是,由于视图很小,我想增加命中目标的大小。通过将“我的按钮”的边框设置为大于自定义视图的边框,并将clipstobunds设置为“否”,这很容易做到(人们会认为)。这对视觉效果有效(自定义按钮在父视图外绘制),但它不会在父视图外的区域接收toucupinside事件。如何使按钮接收touchUpInside事件 - (id) initWithFrame: (CG
UIButtonTypeCustom
实现了这一点,我将其作为视图边界上的子视图包含。但是,由于视图很小,我想增加命中目标的大小。通过将“我的按钮”的边框设置为大于自定义视图的边框,并将clipstobunds
设置为“否”,这很容易做到(人们会认为)。这对视觉效果有效(自定义按钮在父视图外绘制),但它不会在父视图外的区域接收toucupinside
事件。如何使按钮接收touchUpInside
事件
- (id) initWithFrame: (CGRect) frame {
if (self = [super initWithFrame: frame]) {
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = NO;
// ... various image views and labels ...
UIButton *touchArea = [UIButton buttonWithType: UIButtonTypeCustom];
touchArea.backgroundColor = [UIColor colorWithRed: 1 green: 0 blue: 0 alpha: .3]; // so I can see the bounds
CGRect touchAreaFrame = self.bounds;
CGFloat checkboxHitTargetExtension = 7;
touchAreaFrame.origin.y -= checkboxHitTargetExtension;
touchAreaFrame.size.height += (checkboxHitTargetExtension * 2);
touchArea.frame = touchAreaFrame;
[self addSubview: touchArea];
// ... add listeners etc ...
}
return self;
}
使按钮不是视图的子对象,而是视图的同级对象,并放置在其顶部,这样按钮的触摸就不会出现剪切问题。您可以使用pointInside:withEvent:定义特定点是否在视图的“内部”。有关更多信息,请参阅UIView参考
另外,签出CGRect Offset使CGRect变大非常方便。并不是我不能做到这一点,我只是想从总体上解决这一特殊问题,以便在我的视图中更好地划分区域!这正是我需要的。在对按钮框进行计算后,我可以返回YES,然后它是金色的。