UITableViewCell知道单击/选择了哪个单元格

时间:2013-11-09 09:07:55

标签: ios xcode uitableview

我知道有这种方法来检测选择了哪个UITableViewCell:

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {

}

但我不想知道选定的行,我想知道单元格的内容是什么,并根据我想要做的事情。那么有没有办法标记一个单元格? 为了更好地理解,假设我有四个单元格1,2,3和4.当我重新排序它们并且我的订单是1,4,2,3并且我想在另一个视图中显示该值时,它会显示给我当我选择第二行时,2而不是4。

4 个答案:

答案 0 :(得分:5)

你出租车电话

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

来自tableView:didSelectRowAtIndexPath:实现的方法来获取单元格,如下所示:

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    ...
}

但是,这是访问(尤其是修改)表格内容的正确方法。相反,您应该访问表中获取其信息的模型,并在那里进行所有修改。这样,当当前单元格的视觉效果从屏幕滚动并返回时,更改将“粘住”。

答案 1 :(得分:1)

据我所知,有三种方法,

1)通过调用[tableView cellForRowAtIndexPath:indexPath]来访问该单元格。 现在,您可以将单元格数据与模型进行比较。即,您可以使用NSPredicate来获取模型中所选行数据的索引值(从中填充表格单元格)

2)当您重新排序表格行时,只需更改您的模型。例如。第4行变为第2行,通过简单地从第4个位置移除对象并添加到第2个位置来重新排序模型(可能是ArrayList)。因此,当您删除表格行时,它将与该行的模型数据的索引号相同。

3)您可以标记每个视图。但这是代码冗余。你可以通过这样做来实现这样的目标。而不是这个选项,我会选择第一或第二(我认为第二个选项最好是使用你的模型/数组只保留记录。)

答案 2 :(得分:0)

您可以在didselect委托方法中访问所选单元格。

 UITableViewCell *lab = [tableView cellForRowAtIndexPath:indexPath];
    UILabel *selectedCellLabelText = lab.textLabel.text;

答案 3 :(得分:0)

首先,您可以在第二个类中定义NSString的属性以访问与特定单元格内容对应的值,arrayData是存储值的数组,例如1,2,3,4,5然后在你的第一堂课写下这段代码: -

- (void) tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath
{
    SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    secondView.stringValue = [arrayData objectAtIndex:indexPath.row];

    [self.navigationController pushViewController:secondView animated:YES];    
}