这让我发疯了。我在这里看过S.O.因为我认为这是一个简单的答案,但无法找到答案。
在我的自定义UITableViewCell
中:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
// Configure the view for the selected state
if (selected) {
[self.languageLevelNameLabel setTextColor:[UIColor blackColor]];
}
else {
[self.languageLevelNameLabel setTextColor:[UIColor colorMessageCountZero]];
}
[self setNeedsDisplay];
}
在控制器的tableView:cellForRowAtIndexPath:
中:
if ([level integerValue] == indexPath.row) {
[cell setSelected:YES];
}
我已插入断点,selected == YES
正在为正确的单元格传递,if
语句正在执行,但文本永远不会设置为{{ 1}}。
答案 0 :(得分:60)
要让单元格显示为已选中,您必须在-setSelected:animated:
内调用-tableView:willDisplayCell:forRowAtIndexPath:
,如下所示:
目标C:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (/* should be selected */) {
[cell setSelected:YES animated:NO];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; // required, as noted below
}
}
斯威夫特3:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if (/* should be selected */) {
cell.setSelected(true, animated: false)
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) // required, as noted below
}
}
从其他地方拨打-setSelected
无效。
为什么呢?
在初始化或出列单元格之后,但在显示单元格之前,表格视图会调用名为-_configureCellForDisplay:forIndexPath:
的私有方法,该方法除了其他功能外,还将单元格的selected
属性设置为NO。代理人willDisplayCell:forRowAtIndexPath:
在此之后被调用,允许您设置显示所需的任何内容。
答案 1 :(得分:46)
如果要将单元格设置为选中,请在表格视图的cellForRowAtIndexPath方法中使用此方法selectRowAtIndexPath:animated:scrollPosition:
目标-C
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
swift 4
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
答案 2 :(得分:0)
尝试
NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:number_row inSection:0];
[self tableView:tableViewList didSelectRowAtIndexPath:selectedCellIndexPath];
[tableViewList selectRowAtIndexPath:selectedCellIndexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
答案 3 :(得分:0)
没有必要调用cell的setSelected方法.Apple希望我们通过两个函数设置单元格的选择状态,一个是didSelectRowAtIndexPath,另一个是didDeselectRowAtIndexPath,它们总是成对出现。为了解决这个问题,我们只调用两个函数:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self tableView:self.leftTableView didSelectRowAtIndexPath:indexPath];
[self.leftTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];