我有一个表格视图,其值可能相同。
选择单元格时,将使用所选单元格填充文本字段值。
我想只突出显示所选行而不是突出显示与文本字段相同的所有值。
目前的方法是:
其中data
是可能值的数组
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"identifierCell"];
}
NSString *value = ([self.data objectAtIndex:indexPath.row]);
NSString *selectedValue = textField.text;
if ([value floatValue] == [selectedValue floatValue]) {
cell.backgroundColor = [UIColor colorWithRed:220.0/255.0 green:220.0/255.0 blue:220.0/255.0 alpha:1.0];
cell.textLabel.textColor = [UIColor whiteColor];
}
else {
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.textColor = [UIColor blackColor];
}
旁注:我有几个这样的下拉字段,可以根据选择的行来更改文本字段文本。 (即如果在另一个下拉列表中选择了第1行,则会在文本字段文本中填充1.391
。
不确定会有多相关。
如何仅检查所选行并按照下图填充文本字段?
更新:感谢@ k06a使用indexPath是向前迈出的一步,但是现在出现的问题是,如果选择了行A,则B的indexPath不应该更改。我正在考虑设置2个不同的indexPath变量,而didSelectRowAt
只设置我正在调用的方法来改变其他各自的值
答案 0 :(得分:1)
您可以枚举循环中的所有单元格,以根据selectedValue
和value
相等性选择和取消选择行。此循环将取消选择上一行,并选择一个新行。并且不要忘记在重复使用可重复使用的单元后设置初始状态。可以使用以下内容获取所有单元格:self.tableView.visibleCells
或者你可以通过记住它的indexPath来取消选择以前的单元格。并选择一个新的并记住它的indexPath。这是最有效的变体。
或者,您可以在想要更改选择时致电[self.tableView reloadData]
。这样效率会降低,但更短,更容易实现。
<强>更新强>
只是使用不同的单元格选择条件,而不是基于值,而是基于indexPath。并提醒我为什么需要手动选择细胞?我的意思是手动设置backgroundColor
和textColor
可以通过[UITableViewCell setSelected:]
选择自动设置。
答案 1 :(得分:1)
我的解决方案归功于@ k06a
NSIndexPath *selectedIndexPathA;
NSIndexPath *selectedIndexPathB;
在didSelectRowAtIndexPath
中,我将indexPath传递给将设置这些值的方法:
[self setOtherFieldsWithIndexPath:indexPath];
和setOtherFieldsWithIndexPath
方法
if (rowA) { selectedIndexPathA = indexPath; }
else if (rowB) { selectedIndexPathB = indexPath; }
else {...}
然后最后在cellForRowAtIndexPath
if (selectedIndexPathA.row == indexPath.row) {
cell.backgroundColor = [UIColor colorWithRed:220.0/255.0 green:220.0/255.0 blue:220.0/255.0 alpha:1.0];
cell.textLabel.textColor = [UIColor whiteColor];
}
else if (selectedIndexPathB.row == indexPath.row) {
cell.backgroundColor = [UIColor colorWithRed:220.0/255.0 green:220.0/255.0 blue:220.0/255.0 alpha:1.0];
cell.textLabel.textColor = [UIColor whiteColor];
}
else {
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.textColor = [UIColor blackColor];
}
不确定这是否是最佳解决方案,但目前按照我希望的方式运行。