我在viewcontroller的viewDidLoad方法中初始化了一个LongPress手势识别器,如下所示:
longPressGesture_= [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(displayTimeFlagCallout)];
我的viewcontroller中有一个tableview。 tableview包含自定义单元格。每个单元格有2个文本字段。当用户长按文本字段(startTime和endTime)时,我想调出自定义弹出窗口。我不希望放大镜和复制/粘贴弹出窗口在长按文本字段时显示为标准行为,因此在添加我的手势识别器之前,我禁用文本字段的内置长按手势识别器。我已将以下代码添加到我的cellforRowAtIndexPath方法中:
MyCustomCell_iPhone *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil)
{
cell = [[MyCustomCell_iPhone alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
for (UIGestureRecognizer *recognizer in cell.startTime.gestureRecognizers) {
if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
recognizer.enabled = NO;
}
}
for (UIGestureRecognizer *recognizer in cell.endTime.gestureRecognizers) {
if ([recognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
recognizer.enabled = NO;
}
}
[cell.startTime addGestureRecognizer:longPressGesture_];
[cell.endTime addGestureRecognizer:longPressGesture_];
}
但是,这不起作用。现在长按没有任何事情发生。任何想法可能是什么问题?
由于 Hetal
答案 0 :(得分:0)
三个想法:
您无法对两个控件使用相同的长按手势识别器。您必须为每个控件创建一个单独的手势识别器。
在文本字段中开始编辑时,手势识别器似乎会重置(假设您允许在文本字段中进行编辑)。我假设你允许编辑文本字段,如果是这样,我相信你必须设置一个委托,它将禁用不属于你自己的长手势识别器。 (您可以这样做,对于您的长按手势识别器,将其子类化为,例如CustomLongPressGestureRecognizer
,将其用于文本字段的手势识别器,然后您可以禁用任何不属于您自己的UILongPressGestureRecognizer
个对象{ {1}}。)
我从您的代码中推断出您没有使用故事板和原型单元格,因为在这种情况下,CustomLongPressGestureRecognizer
永远不会cell
而您的nil
语句永远不会结束调用你的代码。但是如果你正在使用NIB或不使用原型单元,那么你应该没关系。