2012-08-23 57 views
0

是否有可能區分uitableview中某一行的哪一側已被點擊?檢測uitableviewcell的哪一側已被點擊:左或右

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //which side of row has been detected left or right 
} 
+0

也許更多的上下文來確定使用這個?你能描述一下我們正在談論的情況嗎? –

回答

7

您可以繼承UITableViewCell。在你的子類中,你可以製作一個iVar wasTouchOnLeft。然後覆蓋touchesBegantouchesEnded如下面的例子:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch=(UITouch *)[touches anyObject]; 
    if([touch locationInView:self].x< (0.5 * self.frame.size.width)) 
    { 
     NSLog(@"Touched Left"); 
     wasTouchOnLeft=YES; 
    } 
    else { 
     NSLog(@"Touched Right"); 
     wasTouchOnLeft=NO; 
    } 
    [super touchesEnded:touches withEvent:event]; 
} 

在的didSelectRowAtIndexPathUITableViewController,那麼你可以訪問wasTouchOnLeft變量的單元格。

+0

非常感謝Ben! – user987723

+0

清潔簡單,但非常強大!注意:對於任何使用Landscape或在寬度大於320的其他設備上進行顯影的人,請考慮使用 Newbyman

+0

感謝您的評論Newbyman。我正在更新代碼以反映您的建議。 –

1

您無法直接在此方法中確定此情況。 但是,如果您真的想要此功能,請創建一個自定義桌面單元格,該單元格有兩個大按鈕(右側一個)或在單元格上應用觸摸識別器。

如果你有這樣的委託動作控制器 (你也可以把它存儲在單元格,並通過訪問它)表單元格

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(((YourCustomTableCell*)[tableView cellForRowAtIndexPath:indexPath]).clickedSideProperty) action; 
else anotherAction; 
} 

但不如授之比didSelectRow訪問它...

+0

謝謝,試圖用兩個按鈕的方式,但上下滾動tableview是非常緩慢的。即時通訊基本上將桌面視圖變成圖像網格,所以你可以選擇和圖像看到更多的信息。 – user987723

+0

您是否使用自定義單元格的reusableIdentifier? – lukaswelte

相關問題