2013-12-16 53 views
0

UITableViewCell(或其子類)是否有辦法識別當前在哪個行上運行? - 不通過didSelectRowAtIndexPath方法...我想對UITableViewCell進行子類化並在其中有一些控制對象(按鈕,文本字段等),並且我希望響應該控件的用法,我希望響應考慮到單元電流行;在MYTableViewCell.m文件中這樣做。iOS >> UITableViewCell >>自定義單元>>行號

我到目前爲止所做的工作是在創建時分配標記屬性與行號(cellForRowAtIndexPath);然後我可以在MYTableViewCell文件中創建我自己的協議,創建一個'委託'屬性並將每個單元分配給VC作爲它的委託併發送消息。但是對於如此基本的事情來說,這似乎很重要。

有沒有「內置」的方式來做到這一點? 或者更簡單的方法...

+0

如果我理解正確,你想知道該行是否在屏幕上? –

回答

3

退房的

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell 

方法。我傾向於將tableView屬性添加到單元格,並在創建將擁有該單元格的tableView的單元格時對其進行設置。然後調用:

[tableView indexPathForCell:cell] 

其中返回該單元格的indexPath,給你的部分和行。這當然比使用標籤要好,因爲它包含該部分,並且始終有效,即使單元格更改位置(其他人插入或刪除其上方或實際移動)。

1

那麼你可以使用cellatrowforindexpath方法來執行此類操作。例如,如果你想對按鈕點擊執行一些操作,你可以這樣做。

cell.buttonName.tag=indexPath.row; 

並在您已附加到該按鈕的操作中這樣做。

(ibaction)performsomeAction:(id)sender{ 
UIButton *btn=(UIButton*)sender; 
nslog(@"the row on which i have clicked is %d",btn.tag); 
} 

這會告訴你你當前是哪一行。

0

在不使用屬性或將單元格與其表視圖耦合的情況下,可以通過觸摸其中的控件來獲取單元格的索引路徑。

要做的第一件事就是目標 - 動作添加到您的按鈕,像這樣:

[button addTarget:cell action:@selector(buttonTapped:withEvent:) forControlEvents:UIControlEventTouchUpInside]; 

然後你可以使用事件參數的操作方法:

- (void)buttonTapped:(id)sender withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; 

    // .... 
} 

或者視圖層次結構來檢索單元格:

- (void)buttonTapped:(id)sender withEvent:(UIEvent *)event 
{ 
    UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview]; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

    // .... 
} 

或發件人的位置(即控制):

- (void)buttonTapped:(id)sender withEvent:(UIEvent *)event 
{ 
    CGPoint position = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:position];   

    // .... 
} 
相關問題