2014-10-01 3 views
3

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

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

Однако, я хотел бы укажите, что строка была выбрана путем изменения цвета фона, а не с помощью галочек, которые автоматически появляются слева от каждой строки. (Например, те, которые появляются при редактировании списка электронной почты в приложении «Почта» или обсуждаются в this SO question.) У меня это работает по большей части, за исключением того, что я не могу получить эти флажки, которые автоматически создаются как часть ввода 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 в режиме редактирования с включенным множественным выбором?

EDIT: Я (неохотно) открыт для ответов, которые немного взломаны, например, перемещают рамку с галочками до тех пор, пока она не выйдет из экрана. Это приложение предназначено для внутреннего использования и не нуждается в одобрении для App Store. Но при условии, что флажки создаются автоматически, когда UITableView переходит в режим редактирования, я даже не знаю, как получить их как объекты для изменения. Любая помощь будет оценена!

ответ

4

Вы должны создать подкласс ваш 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; 
} 

UPDATE: Вы также можете сделать следующее в вашем TableView-х tableView:editingStyleForRowAtIndexPath:

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

{ 
      return UITableViewCellEditingStyleNone; 
} 

Но вы получите свою отступную ячейку. Чтобы удалить этот отступ, вам придется подклассифицировать Cell.

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

+0

Отлично, спасибо! Я получил странное удаление разделителей между ячейками во время выбора (согласно [этому вопросу SO] (http://stackoverflow.com/q/19212476/1418688)), но между этим ответом и одним из них я получил его отлично работает! Благодаря! :) Я подтвержу щедрость, как только смогу (через 22 часа). – Nerrolken

+1

Добро пожаловать! – Razvan

+0

О, у меня возникла проблема с отсутствием разделителей (пользовательское фоновое изображение) :). Мне пришлось быстро перечислить подпункты ячейки, чтобы понять это правильно. Я рад, что вы это поняли! – Razvan

0

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

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

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


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

+1

Это недействительный ответ! Это не позволит больше удалять ячейку! – Razvan

+0

@codeFi Я не вижу нигде в вопросе требование удалить ячейки. Только множественный выбор. –

+2

Документация: метод позволяет источнику данных исключать отдельные строки из обрабатываемых как редактируемых. Редактируемые строки отображают управление вставкой или удалением в своих ячейках. Если этот метод не реализован, все строки предполагается редактируемыми. Строки, которые не редактируются, игнорируют свойство editingStyle объекта UITableViewCell и не имеют отступов для элемента управления удалением или вставки.Строки, доступные для редактирования, но которые не хотят иметь отображаемое вставку или удаление, могут возвращать UITableViewCellEditingStyleNone из таблицыView: editingStyleForRowAtIndexPath: delegate ... – Razvan

0

вот как достичь:

  1. салфетки, чтобы удалить Works
  2. вы не видите флажок, удалить элемент или что-нибудь еще на левой ячейки в режиме редактирования
  3. Cell отступы по-прежнему работает нормально (вы можете отключить это, если вы хотите)
  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 

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

Смежные вопросы