我有一个视图,其中包含多个覆盖UIScrollView的UIButton。我想阻止覆盖视图上的用户交互,但不阻止该视图中包含的UIButtons。
我将这些视图分组到单个视图中的原因是,我可以通过更改单个属性将alpha更改应用于视图中的所有按钮。我刚刚注意到IOS 4.0中的IBOutletCollection,但我还需要针对IOS 3.0。
是否有更简单的方法来实现这一点,而不是覆盖以下UIView方法?
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;
答案 0 :(得分:3)
不幸的是,如果禁用与视图的用户交互,则用户与所有子视图的交互也会被禁用。虽然不理想,但您只需为每个按钮制作IBOutlets并相应地进行调整。为避免将来要写入更多其他代码,可以在viewDidLoad中创建NSArray并将每个按钮折腾到其中。然后,每次要更改所有这些按钮上的某个属性时,您只需循环遍历数组并进行更改即可。这样,如果向组中添加另一个按钮,则只需更新阵列,其余更改将自动传播。
答案 1 :(得分:1)
请看一下这个答案:https://stackoverflow.com/a/13414182/2082569
根据这个,您需要在自定义UIView中重写此方法:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *subview = [super hitTest:point withEvent:event];
return subview == self.button ? subview : nil;
}
答案 2 :(得分:0)
仅使用滚动视图禁用 scrollView.scrollEnabled = FALSE; 当您希望用户允许使用按钮时。 当您希望用户使用滚动视图时再次启用 scrollView.scrollEnabled = TRUE;
注意:您不需要禁用滚动视图的用户交互。