我附上一個UISwipeGestureRecognizer
到UITableViewCell
在cellForRowAtIndexPath:
方法,像這樣:UIGestureRecognizer和UITableViewCell的問題
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
gesture.direction = UISwipeGestureRecognizerDirectionRight;
[cell.contentView addGestureRecognizer:gesture];
[gesture release];
}
return cell;
}
然而,didSwipe
方法總是得到成功的刷卡叫了兩聲。我最初以爲這是因爲手勢開始和結束,但如果我註銷gestureRecognizer本身,他們都處於「已結束」狀態:
-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"did swipe called %@", gestureRecognizer);
}
控制檯:
2011-01-05 12:57:43.478 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right>
2011-01-05 12:57:43.480 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right>
我是真的真的不知道爲什麼。我試着明確地檢查了Ended狀態,但這沒有任何幫助,因爲它們都以「End」結尾......任何想法?
謝謝!這阻止了它發射兩次! :) – mootymoots 2011-01-05 17:55:03
謝謝,這有幫助,但我看到一些奇怪的 - 刷卡後,如果我想選擇行,我需要按兩次。第一次什麼都不做,第二次調用didSelectRow ...有人看到了這個? – 2013-02-27 09:34:44
@OdedBenDov我相信這是由手勢識別器引起的,當我添加了輕擊手勢識別器並忘記刪除文本字段的末尾編輯方法(表格視圖單元格的子視圖)時,我有奇怪的表格視圖單元格選擇行爲,可能是這可以作爲解決你的問題的線索,更多細節[這裏](http://stackoverflow.com/questions/9939509/strange-behavior-did-select-row-touch-not-responding-for-uitableviewcell) – 2013-08-28 10:26:19