我是IOS6
dev的新手。我遇到了UITableView
的问题。我的下面的代码是在所选行的末尾显示复选标记。但是我收到了一条错误,例如“UITableView
cellForRowAtIndexPath:
无法显示 @interface ,表示选择器UITableView
”。 cellForRowAtIndexPath
有- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; -----error line
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
方法,但tableView不能
展示下。我不知道为什么。请帮忙。
以下是代码:
{{1}}
问题是“tableView”无法识别UITableView下的所有方法。有些人知道如“numberOfRowsInSection”。我无法弄清楚原因。
答案 0 :(得分:0)
TableView本身不实现此选择器。
此方法的完整选择器是
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
,来自代表的协议。您的委托(例如viewController)必须实现此方法。不建议(并且不容易)从表中获取单元格对象。
相反,更改基础数据并使用
重绘表格[tableView reloadData];
答案 1 :(得分:0)
您的问题不在您提供的代码示例中。你的问题在其他地方。我们无法在这一个片段的基础上诊断出问题。您必须与我们分享更完整的代码示例。
与您的问题无关,您的didSelectRowAtIndexPath
中存在一个微妙的问题。你不应该只是在这里更新cellAccessoryType
。您真的应该更新支持UI的模型。如果表格中的行数多于在任何给定时刻可见的行数,那么这将是至关重要的。
为了说明这个想法,让我们假设你的模型是一个具有两个属性的对象数组,即单元格的title
以及单元格是否为selected
。
因此,您的cellForRowAtIndexPath
可能如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
RowData *rowObject = self.objects[indexPath.row];
cell.textLabel.text = rowObject.title;
if (rowObject.isSelected)
cell.accessoryType = UITableViewCellAccessoryCheckmark;
else
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
}
您的didSelectRowAtIndexPath
可能如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
RowData *rowObject = self.objects[indexPath.row];
rowObject.selected = !rowObject.isSelected;
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
同样,您的编译器警告/错误无疑源于源代码中的其他一些问题,因为您的原始代码段在语法上是正确的。我只是想纠正你didSelectRowAtIndexPath
中的另一个缺陷。在MVC编程中,您确实希望确保更新模型(然后更新视图),而不仅仅是更新视图。
但是,要明确的是,如果您没有更正导致当前编译器警告/错误的错误,那么无论您将哪些内容放入didSelectRowAtIndexPath
,您都可能会收到另一个警告。你必须确定编译器为什么会在你当前的代码中徘徊。