【问题标题】:UITapGesture recognise tap only border wise of UIImageViewUITapGesture 只识别 UIImageView 的边框
【发布时间】:2017-02-09 19:16:21
【问题描述】:

代码如下:

这部分写在**-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath**

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageDispalyFullScreenTapped:)];
                singleTap.numberOfTapsRequired = 1;
                singleTap.delegate=self;
                cell.imgDisplay.userInteractionEnabled = YES;
                [cell.imgDisplay addGestureRecognizer:singleTap];

接下来我实现了委托,即**UIGestureRecognizerDelegate**

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return YES;
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

现在在 UIImageView 被点击时实现了选择器

-(void)imageDispalyFullScreenTapped:(UITapGestureRecognizer*)gesture
{
    UIView *tappedView = gesture.view;
    UITableViewCell *cell=[self getSuperViewOfType:[UITableViewCell class] FromView:tappedView];
    NSIndexPath *indexPath=[tblChat indexPathForCell:cell];
    Sock_ModelChat *objChat=[arrDisplay objectAtIndex:indexPath.row];
    if ([objChat.strUrlLocal stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length>0) {
        imgSelectedDisplay=[[Sock_DB sharedInstance] getImageForName:objChat.strUrlLocal];

        ImageDisplayerViewController *imageDisplayer=[ImageDisplayerViewController sharedInstance];
        imageDisplayer.delegate=self;
        [self addChildViewController:imageDisplayer];
        imageDisplayer.view.frame=CGRectMake(0, 0, CGRectGetWidth([UIScreen mainScreen].bounds), CGRectGetHeight([UIScreen mainScreen].bounds));
        [self.view addSubview:imageDisplayer.view];
        [imageDisplayer didMoveToParentViewController:self];
    }
}

但问题是每当点击图像视图的边框侧或边缘侧时,都会检测到对图像视图的点击并且选择器 imageDispalyFullScreenTapped 被触发。但是当点击中心或附近时中心,没有检测到抽头,因此相关的选择器也没有触发。

我正在开发 XCode 版本 8.0 (8A218a) 和 iOS 10.0。

【问题讨论】:

    标签: ios objective-c iphone uitableview uiimageview


    【解决方案1】:

    在你的情况下可能是 UserInteraction 被禁用

    然后你可以添加手势:

    let gesture:UITapGestureRecognizer = UITapGestureRecognizer.init(target:self, action:#selector(handleTap))
    gesture.numberOfTapsRequired = 1
    gesture.delegate = self
    cell.imageView?.addGestureRecognizer(gesture)
    

    然后在您的视图控制器中添加以下功能

    func handleTap(sender: UITapGestureRecognizer? = nil) {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2014-03-15
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多