我正在使用以下代码检查我的viewcontroller.view
是否发生了点按。
(PS:我添加了点击gesturerecognizer
)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
NSLog(@"\n Clicked view is of type %@",touch.view.class);
if ([touch.view isMemberOfClass:[self class]] || [NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewWrapperView"])
{
return YES;
}
return NO;
}
由于我的viewcontroller.view
包含TableView
包含最少的行和其他一些视图,例如文字字段等,我总是在UITableViewWrapperView
上面打印NSLOG
,当我在表视图(少数行)和底部文本字段之间的差距。
这可能是因为,我的tableview的框架足够大以容纳触摸点,尽管可见的单元格很少
上面的代码非常适合解雇键盘。
我只是担心Apple是否批准包含UITableViewWrapperView
的代码检查。
〜先谢谢
答案 0 :(得分:0)
CGPoint touchPoint = [touch locationInView:nil];
CGPoint convertedPointWRTMainView = [self.view convertPoint:touchPoint fromView:nil];
CGPoint convertedPointWRTTouchView = [YourTableViewReference convertPoint:touchPoint fromView:nil];
BOOL shouldReturnTouch = [YourTableViewReference pointInside:convertedPointWRTTouchView withEvent:nil];
shouldReturnTouch = shouldReturnTouch || [self.view pointInside:convertedPointWRTMainView withEvent:nil];
if(shouldReturnTouch) {
return YES;
}
return NO;
如果使用点击手势的触摸点位于您的桌面视图中,则此代码会通知您。因此,不要使用“UITableViewWrapperView”硬编码检查触摸是否位于tableview内,还要检查tap是否在主视图中。 试试这适用于iOS 6和7