自从过去3到4个小时以来,我一直在研究它,但我没有得到任何信息。我的问题是我想将userInteraction启用到UIViewController的某些部分。
说明
我有一个UIViewController。我添加了30个tableviews。我在应用程序中存储了一个值。如果该值为1,那么我必须仅为tableview1启用用户交互,如果值为2,则tableview2仅为........等
。如果我不清楚,请告诉我。感谢您花费宝贵的时间。提前致谢
答案 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];
}