Скрытие галочек в множественном выделении UITableView в режиме редактирования

У меня есть UITableView который автоматически настраивается для множественного выбора в режиме редактирования, используя следующие строки в viewDidLoad:

self.tableView.allowsMultipleSelectionDuringEditing = YES;
[self setEditing:YES animated:YES];

Однако я хотел бы указать, что строка была выбрана путем изменения цвета фона, а не с помощью галочек, которые автоматически появляются слева от каждой строки. (Например, те, которые появляются при редактировании списка электронной почты в приложении "Почта" или обсуждаются в этом вопросе.) У меня это работает по большей части, за исключением того, что я не могу получить эти флажки, которые автоматически создается как часть помещения UITableView в режим редактирования, чтобы уйти.

Ниже приведен код, с которым я работаю:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _Hierachy.cellCount;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if(testCell == nil) {
        testCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    [[testCell textLabel] setText:@"Test Cell"];

    return testCell;
}

Это единственные UITableView методы, которые у меня есть, поэтому все остальное должно быть поведением по умолчанию.

Кто-нибудь знает, как скрыть эти галочки слева в режиме редактирования? Я видел много вопросов о галочках в вспомогательной части ячейки, но, насколько я понимаю, это совсем другое. Я также видел, как люди говорят о tableView:didSelectRowAtIndexPath: метода, но эти галочки создаются, когда таблица переходит в режим редактирования, и удаляются, когда пользователь нажимает "Готово", так что метод не кажется связанным.

Самый близкий, который я пришел, находит этот метод:

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{
    return NO;
}

Но это только препятствует отступу содержимого ячейки, чтобы освободить место для галочек. Галочки все еще появляются.

Наверняка есть способ скрыть эти галочки и разрешить множественный выбор в режиме редактирования? Или эти галочки серьезно обязательное поведение для UITableView в режиме редактирования с включенным множественным выбором?

РЕДАКТИРОВАТЬ: Я (неохотно) открыты для ответов, которые являются несколько хакерскими, как перемещение рамки галочек, пока она не исчезнет с экрана. Это приложение предназначено для внутреннего использования и не требует одобрения в App Store. Но, учитывая, что галочки создаются автоматически, когда UITableView переходит в режим редактирования, я даже не знаю, как получить их в качестве объектов для изменения. Любая помощь будет оценена!

3 ответа

Решение

Вам придется создать подкласс UITableViewCell и переопределить (void)setEditing:animated: метод как это:

#import "MyCustomCell.h"

@implementation MyCustomCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void)setSelectedBackgroundView:(UIView *)selectedBackgroundView
{
    //Cell Selected Color: CLEAR
    [super setSelectedBackgroundView:selectedBackgroundView];
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    //Cell Edit Mode NO Indent & Selected Color: CLEAR
    [super setEditing:NO animated:animated];
    [self setNeedsLayout];
}

@end

После этого перейдите к Inteface Builder и сделайте свою клетку частью класса MyCustomCell,

После того, как вы сделаете свою ячейку частью класса MyCustomCell в IB, выполните импорт MyCustomCell.h в вашем UITableViewController и измените следующее в вашем коде:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCustomCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if(testCell == nil) {
        testCell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    [[testCell textLabel] setText:@"Test Cell"];

    return testCell;
}

ОБНОВЛЕНИЕ: Вы также можете сделать следующее в вашем TableView tableView:editingStyleForRowAtIndexPath:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

{
            return UITableViewCellEditingStyleNone;
}

Но вы получите свой сотовый с отступом. Чтобы удалить этот отступ, вы должны создать подкласс Cell.

Вы должны быть хороши, чтобы пойти после этого! Я только что проверил это и работает так, как вы хотите!

Вот самое простое решение для множественного выбора без галочек:

- (BOOL)tableView:(UITableView*)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath {
    return NO;
}

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


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

Вот как этого добиться:

  1. проведите пальцем, чтобы удалить работы
  2. Вы не видите флажок, удалить элемент или что-либо еще слева от ячейки в режиме редактирования
  3. Отступ ячейки по-прежнему работает нормально (вы можете отключить это, если хотите)
  4. (бонус) Поддержка множественного выбора

так что - в вашем UITableViewDelegate

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.isEditing)
    {
      return UITableViewCellEditingStyleNone;
    }
    else
    {
      return UITableViewCellEditingStyleDelete;
    } 
}

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{
  (do stuff)
}

вам также нужно настроить свой UITableView

self.table.allowsMultipleSelectionDuringEditing=NO;

теперь, если вы действительно хотите множественный выбор;

self.table.allowsSelectionDuringEditing=YES;

затем управляйте выбранными ячейками самостоятельно.

Я установил пользовательский флажок в своем подклассе UITableViewCell, а также изменил значение в ответ на

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Спрашивающий хочет указать выделение цветом фона - эта часть должна быть простой.

Другие вопросы по тегам