2010-08-23 2 views
10

Есть ли способ изменить изображение элемента управления переупорядочением, которое отображается, когда UITableView находится в режиме редактирования? У меня есть UIImage, который я бы хотел отображать, а не обычные серые полосы.Пользовательский контроль порядка UITableViewCell

Должен ли я подкласс UITableViewCell выполнить это?

ответ

1

В последнее время я немного поработал над этим, но подошел коротко. Я попытался настроить свой собственный файл редактированияAccesoryView, но не смог изменить элемент управления переупорядочением. Странный.

Я думаю, что это что-то делать со следующим комментарием в документации UITableViewCell Re: showsReorderControl:

Если значение ДА, управление переназначения временно заменяет любой аксессуар вид.

Другими словами, файл editAccessoryView заменяется видом управления переупорядочением, поэтому мы не можем переопределить элемент управления переупорядочением. Надеясь, что кто-то найдет обходное решение.

0

Вы установили свойство ячейки editingAccessoryView на изображение, которое содержит нужное изображение.

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

+0

Это не то, что отличается от представления по умолчанию; линии являются волнистыми, а не прямыми ... –

+0

Где я должен это делать? Если я делаю это, когда инициирует ячейку, единственное, что я получаю, - это дополнительный вид слева от представления по умолчанию для переупорядочения. Я также не могу изменить порядок ячеек при перетаскивании нового изображения. Я пробовал установку «cell.editingAccessoryType = UITableViewCellEditingStyleNone;», но безрезультатно. –

+0

Документы говорят, что использовать 'UITableViewCellAccessoryDetailDisclosureButton' или вид аксессуаров для редактирования никогда не появляется или не отвечает. Подробнее читайте в документах UITableView. – TechZen

9

Я думаю, вы уже давно прошли мимо этого, но это вызвало новый вопрос.

Смотрите мой ответ здесь:

Change default icon for moving cells in UITableView

+0

Спасибо. Это здорово сохранить старые вопросы, когда появятся новые решения, если кто-то ищет эту проблему! –

+0

@ RaphaelSchweikert, это именно то, что произошло со мной. – mattsson

+0

Этот вопрос по-прежнему является полезным годом после его публикации. Отличная работа. – Unome

3

Я недавно натыкался на необходимость изменения образа для управления переупорядочиванием, потому что я подклассами UITableViewCell, чтобы обеспечить свою собственную пользовательскую ячейку таблицы. В рамках этой работы я изменил фон ячейки на нечто иное, чем цвет по умолчанию.

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

В ходе различных версий iOS изменилась иерархия представлений в UITableViewCell. Я применил подход, который пересечет весь набор представлений, пока не найдет частный класс UITableViewCellReorderControl. Я считаю, что это будет работать для iOS 5 и всех последующих версий iOS во время этого ответа. Обратите внимание, что хотя сам класс UITableViewCellReorderControl является закрытым, я не использую какие-либо частные API, чтобы его найти.

Во-первых, вот код для проверки контроля порядка; Я предполагаю, что текст «Reorder» будет имя класса - который компания Apple может измениться в будущем:

-(UIView *) findReorderView:(UIView *) view 
{ 
    UIView *reorderView = nil; 
    for (UIView *subview in view.subviews) 
    { 
     if ([[[subview class] description] rangeOfString:@"Reorder"].location != NSNotFound) 
     { 
      reorderView = subview; 
      break; 
     } 
     else 
     { 
      reorderView = [self findReorderView:subview]; 
      if (reorderView != nil) 
      { 
       break; 
      } 
     } 
    } 
    return reorderView; 
} 

В пользовательской UITableViewCell подкласса, вы отменяете -(void) setEditing:animated: и найти управление переназначения здесь.Если вы пытаетесь найти этот контроль, когда таблица не находится в режиме редактирования, контроль повторного заказа не будет находиться в иерархии представлений для ячейки:

-(void) setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 
    if (editing) 
    { 
     // find the reorder view here 
     // place the previous method either directly in your 
     // subclassed UITableViewCell, or in a category 
     // defined on UIView 
     UIView *reorderView = [self findReorderView:self]; 
     if (reorderView) 
     { 
      // here, I am changing the background color to match my custom cell 
      // you may not want or need to do this 
      reorderView.backgroundColor = self.contentView.backgroundColor; 
      // now scan the reorder control's subviews for the reorder image 
      for (UIView *sv in reorderView.subviews) 
      { 
       if ([sv isKindOfClass:[UIImageView class]]) 
       { 
        // and replace the image with one that you want 
        ((UIImageView *)sv).image = [UIImage imageNamed:@"yourImage.png"]; 
        // it may be necessary to properly size the image's frame 
        // for your new image - in my experience, this was necessary 
        // the upper left position of the UIImageView's frame 
        // does not seem to matter - the parent reorder control 
        // will center it properly for you 
        sv.frame = CGRectMake(0, 0, 48.0, 48.0); 
       } 
      } 
     } 
    } 
} 

Ваш пробег может варьироваться; Надеюсь, это сработает для вас.

0

Возможно, мы все это задумаемся. :)

Просто поместите обычай UIImageView поверх верхней части аксессуара по умолчанию, чтобы он закрыл его. Готово.

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