2013-09-28 3 views
13

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

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

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

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

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

EDIT:

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

EDIT 2:

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

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

Я также попробовал то же самое с Tableview, но, как это в 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); 
+0

Итак ... Вы спрашиваете, как ширину указательной секции панели можно изменить? Как переместить кнопку удаления, чтобы она не была закрыта? Вы просто заявляете о проблеме, без вопросов. –

+0

Я добавил более конкретный вопрос. Является ли мое намерение более ясным сейчас? – Stjernegard

+0

Его возможный http://i.stack.imgur.com/scNRZ.jpg –

ответ

10

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

self.tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 

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

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

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

Создал отчет об ошибке для Apple. Пока это не будет исправлено, это должно быть сделано. – Stjernegard

+0

Он не будет работать как с IOS-6, так и с IOS-7. – chandan

+1

Просто добавьте код условно только для iOS 7. Быстрый поиск SO приведет к нескольким способам обнаружения версии iOS. –

6

Метод 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]; 
} 
0

Просто используйте этот код перед выделением какого-либо подвида в cellForRowAtIndexPath

for (id object in cell.contentView.subviews) 
{ 
    [object removeFromSuperview]; 
} 
Смежные вопросы