Apple是否接受包含UITableViewWrapperView检查的代码

时间:2014-06-23 10:36:44

标签: ios iphone objective-c uitableview uigesturerecognizer

我正在使用以下代码检查我的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的代码检查。

〜先谢谢

1 个答案:

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