iPhone: UITableView CellAccessory Checkmark

В приложении iPhone App на экране просмотра таблицы я хочу отобразить ячейку просмотра таблицы Тип аксессуара Отметьте для этого на didSelectRowAtIndexPath я пишу код

if(indexPath.row ==0) { [tableView cellForRowAtIndexPath:indexPath].accessoryType=UITableViewCellAccessoryCheckmark; } 

и отображение контрольных знаков.

но в моем случае i wnt позволяет пользователю проверять только на ячейку за раз, означает, что если пользователь выбирает другую строку, тогда эта строка должна быть проверена и ранее проверена, должна быть снята флажка

Как я могу это достичь?

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

Здесь более подробно. Сначала добавьте свойство, чтобы отслеживать текущую строку. Это проще всего, если это NSIndexPath .

 @interface RootViewController : UITableViewController { ... NSIndexPath* checkedIndexPath; ... } ... @property (nonatomic, retain) NSIndexPath* checkedIndexPath; ... @end 

В cellForRowAtIndexPath добавьте следующее:

 if([self.checkedIndexPath isEqual:indexPath]) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } 

Как вы tableView:didSelectRowAtIndexPath: свой tableView:didSelectRowAtIndexPath: будет зависеть от поведения, которое вы хотите. Если всегда должна быть проверена строка, то есть, если пользователь нажимает на уже проверенную строку, используйте следующее:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Uncheck the previous checked row if(self.checkedIndexPath) { UITableViewCell* uncheckCell = [tableView cellForRowAtIndexPath:self.checkedIndexPath]; uncheckCell.accessoryType = UITableViewCellAccessoryNone; } UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryCheckmark; self.checkedIndexPath = indexPath; } 

Если вы хотите, чтобы пользователь мог снять отметку со строки, нажав на нее снова, используйте этот код:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Uncheck the previous checked row if(self.checkedIndexPath) { UITableViewCell* uncheckCell = [tableView cellForRowAtIndexPath:self.checkedIndexPath]; uncheckCell.accessoryType = UITableViewCellAccessoryNone; } if([self.checkedIndexPath isEqual:indexPath]) { self.checkedIndexPath = nil; } else { UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryCheckmark; self.checkedIndexPath = indexPath; } } 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *newCell =[tableView cellForRowAtIndexPath:indexPath]; int newRow = [indexPath row]; int oldRow = [lastIndexPath row]; if (newRow != oldRow) { newCell = [tableView cellForRowAtIndexPath:indexPath]; newCell.accessoryType = UITableViewCellAccessoryCheckmark; UITableViewCell *oldCell = [tableView cellForRowAtIndexPath: lastIndexPath]; oldCell.accessoryType = UITableViewCellAccessoryNone; lastIndexPath = indexPath; } } 

Для справки рассмотрим эту дискуссию

это простое решение, которое сработало для меня:

в файле .h объявите:

 NSIndexPath *checkedCell; 

то в вашем .m файле добавьте:

  if (checkedCell == indexPath) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } 

к методу cellForRowAtIndexPath и

 checkedCell = indexPath; [tableView reloadData] 

к методу didSelectRowAtIndexPath .

Удачи!

Я работал над вашей проблемой и получил решение

в .h файле

 int rowNO; NSIndexPath *lastIndexPth; 

в . m файл

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"%d",indexPath.row); if (rowNO!=indexPath.row) { rowNO=indexPath.row; [tableView cellForRowAtIndexPath:indexPath].accessoryType=UITableViewCellAccessoryCheckmark; [tableView cellForRowAtIndexPath:lastIndexPth].accessoryType=UITableViewCellAccessoryNone; lastIndexPth=indexPath; } 

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

это просто

в .h

 NSIndexPath checkedCell; 

В .m

 cellForRowAtIndexPath if ([checkedCell isEqual:indexPath]) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } 

in didSelectRowAtIndexPath

 checkedCell = indexPath; [tableView reloadData] 

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

Проверьте нижеприведенную запись

http://www.iphonedevsdk.com/forum/iphone-sdk-development/24240-uitableviewcellaccessorycheckmark-one-checkmark-time.html

Надеюсь, этот вопрос решает вашу проблему:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { int newRow = [indexPath row]; int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1; if (newRow != oldRow) { UITableViewCell *newCell = [tableView cellForRowAtIndexPath: indexPath]; newCell.accessoryType = UITableViewCellAccessoryCheckmark; UITableViewCell *oldCell = [tableView cellForRowAtIndexPath: lastIndexPath]; oldCell.accessoryType = UITableViewCellAccessoryNone; lastIndexPath = indexPath; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; } 

Добавьте в переменную делегата UITableViewDataSource NSIndexPath *checkedIndex . Добавить в didSelectRowAtIndexPath:

 checkedIndex = indexPath; [tableView reload]; 

И измените ваш cellForRowAtIndexPath: method:

 cell = .. // init or dequeue if ([indexPath isEqualTo:checkedIndex]) { cell.accessoryType=UITableViewCellAccessoryCheckmark; } else { cell.accessoryType=UITableViewCellAccessoryNone; } 
  • Использование Swift CFunctionPointer для передачи обратного вызова API CoreMIDI
  • Как написать таймер в Objective-C?
  • Заголовок Swift для Objective-C, не созданный в Xcode 6
  • Несоответствие UUID обнаружено в загруженной библиотеке
  • Могу ли я передать блок как @selector с Objective-C?
  • NSMutableString как сохранить / скопировать
  • Как включить и использовать новые шрифты в iPhone SDK?
  • Проблема с кодом: строка формата не является строковым литералом
  • UITextView с подсветкой синтаксиса
  • Как масштабировать UIImageView пропорционально?
  • Выбор случайного объекта в NSArray
  • Interesting Posts
    Давайте будем гением компьютера.