2016-12-06 2 views
1

У меня есть табличное представление со значениями, которые могут быть одинаковыми.Выделите выбранный tableViewCell для соответствия с UITextfield.text

При выборе ячейки значение поля будет заполнено выбранной ячейкой.

Я хочу выделить только выбранную строку, а не выделять все значения, которые совпадают с текстовым полем.

Мой подход в настоящее время:

где 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]; 
} 

Примечание стороны: у меня есть несколько из этих ниспадающего полей, которые могут изменить текст TextField в зависимости от того, какая строка была выбран. (То есть, если строка 1 была выбрана в другом выпадающем списке, то 1.391 будет заполняться в тексте TextField.

Не знаю, как важно, что будет.

Как я могу проверить только строку, которая была выбрана и заселить текстовое поле на изображении ниже

enter image description here

Обновление: Благодаря @ k06a с помощью indexPath является шагом вперед, однако сейчас проблема возникает там, где, когда, если выбрана строка А, indexPath для B не должен изменение. Я думал о настройке 2 различных переменных indexPath и didSelectRowAt установить только те, для методов, я звоню, чтобы изменить другие соответствующие значения

enter image description here

+0

Вы можете добиться выбора нескольких ячеек, используя свойство 'UITableView' 'MultipleSelection'. – k06a

ответ

1

Вы можете перечислить все ячейки в цикле, чтобы выбрать или отменить выбор строки основанный на selectedValue и value равенство. Этот цикл отменяет выбор предыдущей строки и выбирает новую. И не забудьте установить начальное состояние после повторного использования ячейки повторного использования. Все ячейки могут быть получены с помощью: self.tableView.visibleCells

Или вы можете просто отменить выбор предыдущей ячейки, вспомнив ее индексную таблицу. И выберите новый и запомните его indexPath. Это самый эффективный вариант.

Или вы можете просто позвонить [self.tableView reloadData] если хотите изменить выбор. Это будет менее эффективным, но более коротким и простым в реализации.

UPDATE:

Просто используйте различное состояние выбора ячейки не на основе стоимости, но на основе indexPath. И напомните мне, зачем вам нужен ручной выбор ячейки? Я имею в виду, ручная установка backgroundColor и textColor может быть автоматической на [UITableViewCell setSelected:] выбор.

+0

Не могли бы вы показать, пожалуйста, пример? Я не совсем понимаю первые два метода. – Simon

+0

Я делаю ручную настройку ячейки, потому что у меня есть 3 из этих полей текстового поля. Каждый из них заполняет различные значения для tableview, когда они выбраны. Когда строка используется, все значения изменяются на строку, которая была нажата. Я попробовал метод setSelected, который вы показали, но не добился успеха. – Simon

+0

«indexPath» - шаг вперед, однако я забыл упомянуть о другом требовании. обновлено выше – Simon

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]; 
} 

Не уверен, что это лучшее решение, но в настоящее время работает так, как я хочу, чтобы он работал.

Смежные вопросы