突出显示选定的tableViewCell以与UITextfield.text匹配

时间:2016-12-06 22:29:55

标签: ios objective-c uitableview

我有一个表格视图,其值可能相同。

选择单元格时,将使用所选单元格填充文本字段值。

我想只突出显示所选行而不是突出显示与文本字段相同的所有值。

目前的方法是:

其中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

不确定会有多相关。

如何仅检查所选行并按照下图填充文本字段?

enter image description here

更新:感谢@ k06a使用indexPath是向前迈出的一步,但是现在出现的问题是,如果选择了行A,则B的indexPath不应该更改。我正在考虑设置2个不同的indexPath变量,而didSelectRowAt只设置我正在调用的方法来改变其他各自的值

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以枚举循环中的所有单元格,以根据selectedValuevalue相等性选择和取消选择行。此循环将取消选择上一行,并选择一个新行。并且不要忘记在重复使用可重复使用的单元后设置初始状态。可以使用以下内容获取所有单元格:self.tableView.visibleCells

或者你可以通过记住它的indexPath来取消选择以前的单元格。并选择一个新的并记住它的indexPath。这是最有效的变体。

或者,您可以在想要更改选择时致电[self.tableView reloadData]。这样效率会降低,但更短,更容易实现。

<强>更新

只是使用不同的单元格选择条件,而不是基于值,而是基于indexPath。并提醒我为什么需要手动选择细胞?我的意思是手动设置backgroundColortextColor可以通过[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];
}

不确定这是否是最佳解决方案,但目前按照我希望的方式运行。