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