UITableView Section Index, перекрывающая кнопку удаления строки

После довольно многого поиска документации Google, Stackoverflow и яблок я почти отказался.

Я делаю приложение для индексирования клиентов, и из-за потенциально очень длинного списка я использую индекс раздела для более быстрого перехода. Моя проблема показана на рисунке ниже.

http://i.stack.imgur.com/i2tTx.png

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

У меня нет ширины таблицы настроек таблицы или таблицы, и индекс раздела не может быть действительно изменен, насколько мне известно.

EDIT:

Вопрос заключается в том, как я могу закрывать ячейки tableview, пока они не перекрываются, поэтому кнопка удаления полностью видна.

ИЗМЕНИТЬ 2:

Я уже пробовал устанавливать размер ячейки без каких-либо удачек.

cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width-30, cell.frame.size.height);

Я также пробовал то же самое с представлением таблицы, но, как и в UITableViewController, он не может быть изменен.

self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width-30, self.tableView.frame.size.height);

Ответ 1

В качестве простой работы мы разрешили визуальное перекрытие индекса, установив цвет фона индекса на clearColor.

self.tableView.sectionIndexBackgroundColor = [UIColor clearColor];

* Это выглядит визуально лучше, но индекс все равно будет перекрывать ваш tableViewCell.

Еще одна возможная работа - скрыть панель указателя при входе в режим редактирования:

// allow editing
[self.tableView setEditing:YES animated:YES];
// hides the index
self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMax;

Ответ 2

Метод inEditMode должен сделать трюк. Ниже я вставляю полный код, который скрывает индекс при редактировании и показывает его снова, когда редактирование выполнено.

-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{
    [self inEditMode:YES];
}

-(void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{
    [self inEditMode:NO];
}
//on self.editButtonItem click
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{
    [super setEditing:editing animated:animated];
    [self inEditMode:editing];
}

-(void)inEditMode:(BOOL)inEditMode{
    if (inEditMode) { //hide index while in edit mode
        self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMax;
    }else{
         self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMin;
    }
    [self.tableView reloadSectionIndexTitles];
}

Ответ 3

Просто используйте этот код, прежде чем выделять какой-либо subview в cellForRowAtIndexPath

for (id object in cell.contentView.subviews)
{
    [object removeFromSuperview];
}