按标签查找单元格的indexPath

时间:2014-11-06 21:43:53

标签: ios objective-c uitableview

我有桌子和细胞;每个单元格包含带有电话号码的标签当我点击标签时,会出现UIMenuController

是否有主要的方法来查找包含所选标签的单元格的indexPath? (didSelectRowAtIndexPath:不应该被调用)

我可以想象很多肮脏的黑客,但我正在寻找一个主要/好的解决方案。

UPD

我参考了所选标签。

3 个答案:

答案 0 :(得分:4)

编辑:

这是一种更好的方式。

- (IBAction)someMethod:(id)sender {
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
}

答案 1 :(得分:1)

从标签中搜索标签层次结构中的单元格对象:

-(UITableViewCell*) cellContainingView:(UIView*)view
{
    UIView* currentView = view;
    while (currentView)
    {
        if ([currentView isKindOfClass:[UITableViewCell class]])
        {
            return (UITableViewCell*)currentView;
        }
        currentView = currentView.superview;
    }
    return nil;
}

获得手机后,请致电[tableView indexPathForCell:cell] 使用此方法而不是硬编码view.superview.superview会使您的代码更强大,因为它可以通过系统版本处理单元格视图层次结构中的可能更改。

答案 2 :(得分:-1)

你可以去:

NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [tableView numberOfSections]; ++j)
{
    for (NSInteger i = 0; i < [tableView numberOfRowsInSection:j]; ++i)
    {
        [cells addObject:[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
    }
}

for (UITableViewCell *cell in cells){
   for (UILabel *label in cell.subviews){
        if (label == yourLabel)
           indexPath = [tableView indexPathForCell: cell];
   }
}