iOS UITableViewCellAccessoryCheckmark Видимый для каждого прокрутки

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:indexPath];
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark)
    {
        oldCell.accessoryType = UITableViewCellAccessoryNone;
    }
    else
    {
        oldCell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}
0
nl ja de
пожалуйста, напишите свой метод cellForRowAtIndexPath
добавлено автор Murali, источник

4 ответы

Это потому, что UITableView повторно использует ячейку. Таким образом, в методе cellForRowAtIndexPath вам нужно будет проверить конкретную ячейку (определенного раздела и строки), если ее необходимо проверить, укажите тип аксессуара.

Если это не требуется для этой ячейки, укажите тип принадлежности как none.

0
добавлено

Вам нужно поместить свою логику, чтобы установить тип аксессуара для ячейки в cellForRowAtIndexPath , и чтобы идентифицировать ячейку для отметки с помощью галочки, вы можете пометить объект в списке в didSelectRowAtIndexPath: или управлять массивом выбранных/невыделенных объектов в списке.

0
добавлено

UItableView reuses the cell in every scroll so using condition as per accessory type is not a good practice. You can Create an NSMutableArray with selected items and Check as per the Condition below.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    if ([selected containsIndex:indexPath.row]) {
        [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
   //Do the rest of your code
    return cell;
} 

в методе didSelectrowAtindexpath вы можете добавлять и удалять выбранные элементы.

0
добавлено
Другой способ сделать это - создать пользовательский UITableViewCell и переопределить метод prepareForReuse, где вы можете очистить свою ячейку до состояния initisl. Это помогает в том случае, если для рисования ячейки существует много логики. Я сделал это в своей недавней работе, где ячейка могла иметь несколько значков, а включение и выключение CellForRow было бы полным кодов.
добавлено автор Leonardo, источник
Спасибо Сиба, то же самое, что я подумал, и после твоего ответа я подтвердил.
добавлено автор Arahim, источник
@Leonardo благодарит за ваш комментарий, это имеет смысл. можете ли вы опубликовать код, который вы уже сделали?
добавлено автор Siba Prasad Hota, источник
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {

        [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];

        [NSMutableArray addObject:[AnotherMutableArray objectAtIndex:indexPath.row]];

    } else {

        [selectedCell setAccessoryType:UITableViewCellAccessoryNone];

       [NSMutableArray removeObject:[AnotherMutableArray objectAtIndex:indexPath.row]];

    }
    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

Также в вашем представленииDidLoad, создайте экземпляр обоих изменяемых массивов -

yourmutableArray1 = [[NSMutableArray alloc]init];
yourmutableArray2 = [[NSMutableArray alloc]init];
0
добавлено
Его читаемость кода. :)
добавлено автор alloc_iNit, источник
thankX @alloc_iNit. U знаю, не все программисты хороши в проектировании (me 2): p
добавлено автор AKB, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.