除了特定的几个点(例如按钮)之外,我想禁用屏幕上所有区域的触摸。即,当我点击按钮以外的任何内容时,我根本不希望触发“touchesBegan”。打电话
self.view.userInteractionEnabled = NO;
具有不注册触摸的预期效果,但是当然我不能点击任何按钮。我基本上希望按钮仍然可以工作,即使有5个点触摸屏幕,即所有触摸输入都已用完,按钮代表第6个。
这可能吗?
我尝试在我的按钮下方插入一个禁用 userInteraction 的视图,但当用户点击屏幕时它仍然会注册触摸。似乎禁用触摸注册的唯一方法是在整个屏幕上(在父 UIView 上)这样做。
更新:我尝试使用手势识别器来处理所有触摸事件,并忽略那些不符合条件的事件。这是我的代码:
@interface ViewController : UIViewController <UIGestureRecognizerDelegate>
...
- (void)viewDidLoad
{
[super viewDidLoad];
UIGestureRecognizer *allRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:nil];
allRecognizer.delegate = self;
[self.view addGestureRecognizer:allRecognizer];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
CGPoint coords = [touch locationInView:self.view];
NSLog(@"Coords: %g, %g", coords.x, coords.y);
if (coords.y < 200) {
[self ignoreTouch:touch forEvent:nil];
return TRUE;
}
return FALSE;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%i touch(es)", [touches count]);
}
但是屏幕仍然“读取”触摸,所以如果我将 5 根手指向下放置,第 6 根手指将不会触发按钮按下......