2011-08-24 114 views
1

我有一個自定義表格單元格中的UITapGestureRecognizer,它無意做任何事情(刪除點擊單元格以選擇它的功能)。這很有效,但是在單元格中有一些按鈕(子視圖),因爲輕擊手勢會處理整個單元格區域,所以無法輕叩。iOS - 忽略輕擊手勢

因此,它很簡單,只要檢測觸摸手勢何時位於其中一個按鈕上方,並返回false以取消該特定手勢,對吧?那麼不適合我...

我已經刪除了邏輯,只是在手勢識別器中返回NO,但我仍然無法點擊按鈕。

- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch 
{ 
    return NO; 
} 

有什麼我在這裏失蹤?

回答

3

解決方案更簡單:您不應該使用手勢識別器來執行此操作。如果你不希望一個小區可以進行選擇,你可以做兩件事情:從-tableView:willSelectRowAtIndexPath:

  • 回報nil,使其不可選擇
  • 設置單元格的selectionStyleUITableViewCellSelectionStyleNone刪除突出顯示效果

這樣做應該保留你的按鈕功能。


編輯:如果你不想這樣做,那麼你可以做你最初嘗試 - 除了我覺得你的方法名錯了,應該是這樣的:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
+0

我不想刪除,選擇細胞的能力。用戶仍然可以用另一個手勢選擇它。 – Nippysaurus

+0

@Nippysaurus見我編輯的答案,然後.. – jtbandes

+0

你是絕對正確的。對於很多年來(這一直是我一直存在的問題),我認爲人們正在談論手勢識別器的行爲......我沒有意識到它也可能有一個委託,並且方法簽名非常相似:)感謝您花時間爲我回答這個問題:) – Nippysaurus

0

要做到這一點,我做了這樣的自定義按鈕:

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self addTarget:self action:@selector(touchDown) forControlEvents:UIControlEventTouchDown]; 
    [self addTarget:self action:@selector(touchUpInside) forControlEvents:UIControlEventTouchUpInside]; 
    [self addTarget:self action:@selector(touchUpOutside) forControlEvents:UIControlEventTouchUpOutside]; 
} 

- (void)touchDown 
{ 
    self.imageView.image = [UIImage imageNamed:@"ButtonPressed.png"]; 
} 

- (void)touchUpInside 
{ 
    self.imageView.image = [UIImage imageNamed:@"Button.png"]; 
} 

- (void)touchUpOutside 
{ 
    self.imageView.image = [UIImage imageNamed:@"Button.png"]; 
} 

- (void)setHighlighted:(BOOL)highlighted 
{ 
    return; 
}