启用UserInteraction到UIViewController的某些部分

时间:2016-02-12 09:51:40

标签: ios objective-c swift

自从过去3到4个小时以来,我一直在研究它,但我没有得到任何信息。我的问题是我想将userInteraction启用到UIViewController的某些部分。

说明

我有一个UIViewController。我添加了30个tableviews。我在应用程序中存储了一个值。如果该值为1,那么我必须仅为tableview1启用用户交互,如果值为2,则tableview2仅为........等

。如果我不清楚,请告诉我。感谢您花费宝贵的时间。提前致谢

2 个答案:

答案 0 :(得分:1)

一种简单的方法是继承UIView并覆盖- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

对于想要子视图忽略触摸的UIView部分(在示例中表示为ignoreRect),返回NO。

@interface InteractionView ()

@property (nonatomic) CGRect ignoreRect;

@end

@implementation InteractionView

- (void)awakeFromNib {
    self.ignoreRect = CGRectMake(0.0f, 0.0f, 300.0f, 300.0f);
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(self.ignoreRect, point)) {
        return NO;
    }

    return [super pointInside:point withEvent:event];
}

@end

如果您需要对预期行为进行更多调整:例如,返回特定区域的特定视图,返回特定区域的顶视图,......您可以使用

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(self.ignoreRect, point)) {
        return nil; // Edit that part if you want to return a chosen view
    }

    return [super hitTest:point withEvent:event];
}

答案 1 :(得分:1)

没有- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event.的另一个解决方案是将UIButton作为子视图添加到您希望关闭互动的UIView部分。 例如,如果要关闭视图下半部分的交互。

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, self.view.frame.size.height*0.5f, self.view.frame.size.width, self.view.frame.size.height*0.5);
    [self.view addSubview:button];

因为它将获得触摸事件,所以视图的一半将关闭用户交互。

修改

IBOutletCollection(UITableView) NSArray *allTableViews;// get all your tableviews reference to this array. set tag in interface builder for each array to reach later.

然后当您要启用/禁用相关tableview

的互动时
int tagToOpenInteraction = 1;//or whatever it is
for(UITableView *t in allTableViews)
{
     if(t.tag == tagToOpenInteraction)
         [t setUserInteractionEnabled:YES];
     else
        [t setUserInteractionEnabled:NO];  
}