用户交互已禁用视图但已启用子视图(UIButtons)

时间:2011-01-17 14:22:59

标签: iphone objective-c cocoa-touch interface-builder

我有一个视图,其中包含多个覆盖UIScrollView的UIButton。我想阻止覆盖视图上的用户交互,但不阻止该视图中包含的UIButtons。

我将这些视图分组到单个视图中的原因是,我可以通过更改单个属性将alpha更改应用于视图中的所有按钮。我刚刚注意到IOS 4.0中的IBOutletCollection,但我还需要针对IOS 3.0。

是否有更简单的方法来实现这一点,而不是覆盖以下UIView方法?

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

3 个答案:

答案 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;

注意:您不需要禁用滚动视图的用户交互。