基本上我想要实现的是在自定义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做了不同的事情,但似乎都没有用:(。
任何想法都赞赏!谢谢!
答案 0 :(得分:2)
你应该能够通过将激活剂放在细胞本身上来实现这一目标。由于您的UITextField
仍在接受用户输入,因此它将阻止基础小区接收到触摸。
您可以通过将UILongPressGestureRecognizer
添加到CustomCell
对象并进行设置来解决此问题:
cell.nameTextField.userInteractionEnabled = NO;
答案 1 :(得分:1)
好吧,我终于找到了一个有效的解决方案。
我在UITextField顶部添加了透明视图,并在此视图中添加了长按识别器。通过这种方式,轻击手势进入"通过"透明视图和我的单元格被正确选择: - )
无论如何,谢谢!