Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 多次滑动调用该方法的手势_Ios_Objective C_Uitableview_Uigesturerecognizer - Fatal编程技术网

Ios 多次滑动调用该方法的手势

Ios 多次滑动调用该方法的手势,ios,objective-c,uitableview,uigesturerecognizer,Ios,Objective C,Uitableview,Uigesturerecognizer,我有一个小问题,em一直坚持。。我有一个自定义的UITableViewCell,在它的textView上,我添加了2个手势、uitappostation和uiswippostate。。轻触手势工作正常,但滑动手势正在多次调用该方法。。有时会打两次电话,有时甚至更多……下面是我如何将它们添加到手机中的 //added in cellForRowAtIndexPath Method UITapGestureRecognizer *tapToTranslate = [[UITapGestureReco

我有一个小问题,em一直坚持。。我有一个自定义的
UITableViewCell
,在它的
textView
上,我添加了2个手势
uitappostation
uiswippostate
。。轻触手势工作正常,但滑动手势正在多次调用该方法。。有时会打两次电话,有时甚至更多……下面是我如何将它们添加到手机中的

//added in cellForRowAtIndexPath Method
UITapGestureRecognizer *tapToTranslate = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapToTranslate:)];
[tapToTranslate setNumberOfTapsRequired:1];
[tapToTranslate setNumberOfTouchesRequired:1];
tapToTranslate.delegate = self;
[cell.messageContentView addGestureRecognizer:tapToTranslate];


UISwipeGestureRecognizer *swipeToTranslate = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(translateTo:)];
swipeToTranslate.numberOfTouchesRequired = 1;
swipeToTranslate.direction = UISwipeGestureRecognizerDirectionLeft;
swipeToTranslate.delegate = self;
[cell.messageContentView addGestureRecognizer: swipeToTranslate];
这里有很多方法

-(void)tapToTranslate:(UITapGestureRecognizer *)aGesture {}

-(void)translateTo:(UISwipeGestureRecognizer *)aGesture 
{
    aGesture.enabled = false;
}
我尝试在调用后在其方法中禁用滑动手势,但没有任何帮助

我还有
uigesturecognizer
delegate方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
所以任何帮助都会很好… 先谢谢你

编辑1

<UITextView: 0x11322f700; frame = (18 10; 160.865 69.2656); text = '你怎么样?    How are you doing?'; clipsToBounds = YES; gestureRecognizers = <NSArray: 0x11322fbd0>; layer = <CALayer: 0x11322fac0>; contentOffset: {0, 0}>

对于不同的状态,如
UIGestureRecognitizerStateBegind
UIGestureRecognitizerStateEnded
,UIGestureRecognitizerStateEnded,UIGestureRecognitizer确实多次调用该函数。它还在刷卡时不断调用函数,这可以在下面的最后一条else语句中处理。在“滑动手势”功能中,执行以下操作:

-(void)translateTo:(UISwipeGestureRecognizer *)aGesture
{
if (recognizer.state == UIGestureRecognizerStateBegan)
{
//do something
} 
else if(recognizer.state==UIGestureRecognizerStateEnded)
{
}
else
{
 //do something while it is swiping
}
}

下面的答案可能与您的意图不符,但仍可能对您有所帮助:

问题是,Tableview有自己的手势识别器。通过在tableview上添加额外的手势,它不知何故会与调用手势混淆。这可能就是这个问题的原因。这就是解决办法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    if ([gestureRecognizer.view isKindOfClass:[UITableView class]]) {
       ...
    } else {
       ...
    }
}

您可以使用此功能识别同步手势。

删除
手势后。delegate=self行从两个手势中,该方法开始调用一次,就像它假设的那样。显然是为我做的。因此,对于任何面临此问题的人,他们都可以尝试删除
手势的委托及其方法。

是的,我认为这可能是问题所在……你知道如何解决它吗?请检查解决方案,现在它成为了一个答案:)我尝试了这个。。新增
返回号
对于
UITableView类的手势
YES
对于另一个,但仍在做相同的事情…您的要求只是向左滑动?它总是调用uigestureRecognitizerStateEnded。。永远不要进去,否则…刷卡是一个离散的手势“刷卡是一个离散的手势”的意思是?@AhmedZ。手势有两种,一种是离散的,另一种是连续的。离散手势没有开始状态。@KudoCC离散手势并不意味着它们没有开始状态。刷卡手势有一个开始状态并被调用。你能在
cellforrowatinexpath
方法中显示整个代码吗?尝试将登录
-(void)translate添加到:(uisweegestureerecognizer*)aGesture
NSLog(@“%@”,aGesture.view)让我们看看它是否是相同的视图。好的,我正在尝试这个NSLog..用我得到的编辑了问题它是否始终显示相同的UITextView:0x11322f700?是的…突然删除
委托=self已使其工作…。