0

I know that there is this method to detect which UITableViewCell is selected:

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

}

But i don't want to know the selected row, i want to know what the content of the cell is and according to that i want to do something. So is there a way to tag a cell? For better understanding, let's say i have four cells 1, 2, 3 and 4. When i reorder them and my order is 1, 4, 2, 3 and i want to show the value in another view, then it'd show me 2 instead of 4 when i select the second row.

4

4 回答 4

5

你打车打电话

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

从您的tableView:didSelectRowAtIndexPath:实现中获取单元格的方法,如下所示:

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

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

于 2013-11-09T09:11:51.083 回答
1

据我所知,有三种方法,

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

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

3)您可以标记每个视图。但这是代码冗余。你可以不这样做就实现这样的事情。而不是这个选项,我会选择第一个或第二个(我认为第二个选项是最好的,如果使用你的模型/阵列只保留记录。)

于 2015-02-20T13:26:32.493 回答
0

您可以在 didselect 委托方法中像这样访问选定的单元格。

 UITableViewCell *lab = [tableView cellForRowAtIndexPath:indexPath];
    UILabel *selectedCellLabelText = lab.textLabel.text;
于 2013-11-09T09:13:29.417 回答
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];    
}
于 2013-11-09T10:05:54.883 回答