Как сделать флажок (по одному) выбранным в UITableViewCell? - PullRequest
0 голосов
/ 27 января 2012

Hiii, я хочу сделать просмотр таблицы, и когда я нажимаю на ячейку, она переходит к следующему представлению там, я могу выбрать конкретную опцию (только по одной за раз) с галочкой и любой текст в выбранной опции, он должен отображатьсяв предыдущем представлении (которое также является представлением таблицы)

Пожалуйста, помогите мне с этим.

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
   [self.tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
}

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 31 января 2012

Я написал пример проекта в XCode, который может оказаться полезным.

CheckedTableView .

Способ сделать это - обновить источник данных и перезагрузитьТаблица.Попытка изменить состояние таблицы напрямую не будет работать.

0 голосов
/ 05 сентября 2013

Просто используйте метод tableView:didSelectRowAtIndexPath и tableView:cellForRowAtIndexPath вместе таким образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
}

И, если вы не хотите, чтобы пользователи видели плохое зрение ячейки, все еще подсвеченной, просто добавьте эту строку кода непосредственно перед закрывающей скобкой:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

P.S. Я сделал это анимированным, чтобы он выглядел хорошо.

Ссылки:

Половина отсюда: iPhone: UITableView CellAccessory Галочка

И наполовину отсюда: Как отменить выбор выделенной ячейки UITableView?

0 голосов
/ 28 января 2012

Давайте использовать A и B для представления вашего первого представления таблицы и второго представления таблицы. И скажем, вы можете перейти от А до Б.

Вам понадобятся следующие вещи:

  1. Пользовательский объект того, что представляла ваша ячейка uitableview, или NSIndexPath, или даже целое число, используемое в качестве индекса для A. Установите значение в A - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {}, потому что после того, как вы сделали выделение в B позже, вы хотите знать, куда вы добавите свой текст.

  2. Показать галочку в B - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {}, установите его на текущий выбранный. Вы должны найти способ записать информацию, и она должна исходить из вашего процесса навигации от A до B. Что я обычно делаю, это создаю пользовательскую функцию инициализации B, вызываемую из A. Вы также можете сделать текущий выбранный объект свойство в B и установите его из A, когда вы инициализируете B, прежде чем переходить из A. Независимо от того, что вы делаете, вы, вероятно, все равно захотите создать это свойство.

  3. Сделать A делегатом вашего B, реализовать функцию - (void) getSelectionFromB: (SomeClass *) obj {} и внутри B - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {}, вызовите [делегат getSelectionFromB: selectedObject], и с вами должно быть все в порядке.

  4. В реализации A - (void) getSelectionFromB: (SomeClass *) obj {}, либо найдите ячейку в табличном представлении и измените ее, либо измените NSArray или все, что вы используете для заполнения представления таблицы, и затем перезагрузите данные.

Надеюсь, это поможет.

0 голосов
/ 27 января 2012

Вы можете отслеживать текущий выбранный элемент в свойстве класса типа NSIndexPath.Прежде всего инициализируйте это свойство nil или любым другим значением, которое было выбрано ранее.Вы также можете исправить свой cellForRowAtIndexPath, чтобы сравнить indexPath ячейки со «выбранным в данный момент» свойством пути индекса и добавить галочку там, если они совпадают.Теперь все, что вам нужно сделать в didSelectRowAtIndexPath, примерно так (код, не проверенный компилятором, может содержать небольшие ошибки):

NSIndexPath *oldIndexPath = self.selectedIndexPath; // retain this if not using ARC!
self.selectedIndexPath = indexPath; // passed in from didSelectRowAtIndexPath
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects: oldIndexPath, self.selectedIndexPath, nil], UITableViewRowAnimationNone];
// release oldIndexpath if noct using ARC

Поскольку cellForRowAtIndexPath должен создать ячейку с галочкой или без неев зависимости от self.selectedIndexPath это соответствующим образом обновит ячейки (а также создаст правильный вид в начале, если что-то уже должно быть выбрано).

Бонус: у вас есть self.selectedIndexPath, чтобы определить, к чему следует вернуться"вызывающий" вид, т.е. какая строка выбрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...