2013-12-09 44 views
6

我在我的UITableView中繼承了UITableViewCell。我做到了大約一千次之前,但現在我想抓住這個代表事件:UITableViewCell didselectrow event delay

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath; 

當電池被觸摸這個回調應該被調用。 但我只有在觸摸後按6秒或6次時才調用,但不是每次觸摸。

的實現代碼如下是一個子類UIView的子視圖,我稱這種現象爲awakeFromNib

-(void)awakeFromNib{ 
_table_view.delegate = self; 
_table_view.dataSource = self; 
} 

的實現代碼如下繪製本身就好了,但是這個事件都不盡如人意。 有什麼想法?

這裏是UITableViewCell子類代碼的.m

#import "FLBlockedPersonCell.h" 

@implementation FLBlockedPersonCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 


- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{ 
    [super setHighlighted:highlighted animated:animated]; 
} 



@end 

回答

2

當細胞被觸摸此調用應該發生:

-(void) tableView:(UITableView*) tableView didHighlightRowAtIndexPath:(NSIndexPath*) indexPath 

的didSelect只調用如果你真的選擇了一個小區,不只是拍了拍它。像shouldHighlight和willSelect這樣的幾個方法也會在觸摸時調用。

+0

它發生只有當單元格按下1秒後突出顯示我需要它發生在我觸摸單元格時 –

+1

shoudlHighlight怎麼樣? –

1

首先,確保tableView.allowsSelection設置爲YES

聽起來對我來說,是UITableView是子視圖是阻止觸摸事件的UIView

您需要確保UIView子類不捕獲任何觸摸事件。

touchesBegan:withEvent: 
touchesMoved:withEvent: 
touchesEnded:withEvent: 
touchesCancelled:withEvent: 

如果您實現這個方法我也將返回NO:我想從你的UIView子類中刪除任何這些方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    return NO; 
} 

你真的不應該需要被重寫這些方法之一:

hitTest:withEvent: 
pointInside:withEvent: 

如果你是,問爲什麼,並刪除它們。

+0

我做了你在這裏提到的一切,但這仍然是一樣的 –

+0

@or azran在問題中放置UITableViewCell子類的代碼。 –

+0

代碼放在這裏 –

7

也許你在你的視圖中添加了UITapGestureRecognizer,當你觸摸它的時候,UITapGestureRecognizer的第一個響應。

+0

如果我想弄明白這一點,那將是一個好消息。 –

+0

如果你在視圖上有一個UITapGestureRecognizer,設置recognizer.cancelsTouchesInView = false來解決這個問題。 – Harris