В переменной экземпляра отслеживать, какая строка проверяется.Когда пользователь выбирает новую строку, сначала снимите флажок с ранее проверенной строки, затем проверьте новую строку и обновите переменную экземпляра.
Вот более подробно.Сначала добавьте свойство, чтобы отслеживать текущую проверенную строку.Проще всего, если это 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:
, будет зависеть от поведения, которое выхочу.Если всегда должна быть проверена строка, то есть, если пользователь нажимает на уже проверенную строку, используйте следующее:
- (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;
}
}