从 UITableViewCell 内的 UITextField 中删除 Tap 手势

Posted

技术标签:

【中文标题】从 UITableViewCell 内的 UITextField 中删除 Tap 手势【英文标题】:Remove Tap gesture from UITextField inside a UITableViewCell 【发布时间】:2014-11-04 15:39:11 【问题描述】:

基本上我想要实现的是在自定义 UITableViewCell 中有一个 UITextField ,而这个文本字段应该只在长按时触发。因此,如果用户只是在文本字段上点击一次,则单元格应触发其委托方法 didSelectRow。

到目前为止,我在文本字段上添加了长按并删除了所有其他手势。因此,当我长按它时,我的文本字段会正确触发。但问题是,当我只是点击文本字段时,不会触发单元格并且不会调用 didSelectRow 方法。如果我在我的文本字段之外点击,则该方法被正确地称为 ofc。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"CustomCell";

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (cell == nil) 
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    cell.nameTextField.gestureRecognizers = nil;

    UILongPressGestureRecognizer *longPressTextField = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleCellTextFieldLongPress:)];
    [cell.nameTextField addGestureRecognizer:longPressTextField];

    return cell;

我用 UIGestureRecognizerDelegate 尝试了不同的东西,但似乎没有一个工作:(。

任何想法表示赞赏!谢谢!

【问题讨论】:

【参考方案1】:

您应该能够通过将激活器放在单元本身上来完成此操作。因为您的UITextField 仍在接受用户输入,所以它将阻止底层单元格接收触摸。

您可以通过将UILongPressGestureRecognizer 添加到CustomCell 对象并设置来解决此问题:

cell.nameTextField.userInteractionEnabled = NO;

【讨论】:

【参考方案2】:

好吧,我终于找到了一个可行的解决方案。

我在 UITextField 顶部添加了一个透明视图,并在此视图上添加了我的长按识别器。通过这种方式,点击手势“穿过”透明视图并且我的单元格被正确选择:-)

无论如何谢谢!

【讨论】:

如果有效,为什么会出错?伊恩的回答不符合我的需要。我不想在我的整个单元格上使用 UILongPressGestureRecognizer,我只想在我的 UITextField 框架上使用它。当 UILongPressGestureRecognizer 被触发时,我只需要告诉我的 TextField 成为第一响应者就可以了。请告诉我这有什么问题? 啊,我的错,对不起。没有正确理解问题。

以上是关于从 UITableViewCell 内的 UITextField 中删除 Tap 手势的主要内容,如果未能解决你的问题,请参考以下文章

从 uitableviewcell 内的文本字段中关闭 iPad 上的键盘

将 UITextField 添加到 UITableViewCell

如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?

UITableViewCell 内的 UICollectionView 滚动行为

下载来自 url 的数据时,重新加载 uitableviewcell 内的 Collection 视图

自动滚动到放置在 UITableViewCell 内的 textView 光标在 iOS11 中不起作用