2014-09-25 53 views
2

我有一個UITableView,其中包含UIPanGestureRecognizer的單元格。這些作品在iOS7上完美無瑕,但在iOS8上無法使用。我試圖實現UIGestureRecognizerDelegate中的幾種方法,但我無法使其工作。UITableView中的UIPanGestureRecognizer在iOS8上不起作用

這是怎麼了我已經實現了我的細胞:

- (void)awakeFromNib 
{ 
    self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panning:)]; 
    self.panRecognizer.delegate = self; 
    self.panRecognizer.minimumNumberOfTouches = 1; 
    self.panRecognizer.maximumNumberOfTouches = 1; 
    [self.contentView addGestureRecognizer:self.panRecognizer]; 
} 

-(void)panning:(UIPanGestureRecognizer*)sender 
{ 
    [self.dragDelegate dragCell:self isPanningForRecognizer:sender]; 
} 

#pragma mark - UIGestureRecognizerDelegate 
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    return YES; 
} 

這僅僅適用於iOS7,但它不能在iOS8上工作。

我已經嘗試實現這些方法藏漢(即使它沒有必要在iOS7):

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

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    NSLog(@"gestureRecognizerShouldBegin"); 
    return YES; 
} 

但我的問題似乎是,gestureRecognizer:shouldReceiveTouch:不會被調用的iOS8上。在iOS8上調用的唯一方法是gestureRecognizerShouldBegin:,即使我返回YES也不起作用。

如果你能想出另一種方法使其工作,我願意以不同的方式處理這個問題。

回答

4

看起來蘋果在iOS8中改變了contentView的一個UITableViewCell。無論我嘗試了多少次,我都無法使它在contentView上工作,但是當我拼命嘗試將識別器添加到contentView的子視圖中時,它就起作用了。

編輯:

通過進一步調查中我使用的是廈門國際銀行文件沒有contentView。這是一個標準的UIView,它被設置爲我的自定義單元類。問題似乎是iOS7在其他子視圖之上自動添加contentView,即使contentView不是xib文件。另一方面,iOS8也是這樣做的,但contentView被放置在我的其他子視圖下方,這使觸摸事件不可能被觸發。

相關問題