2013-12-16 52 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];   

    // .... 
} 
相关问题