2015-04-28 5 views
4

Этот вопрос задан несколько раз, но, похоже, для этого не существует никакого решения.UITableViewCell reorder очищает цвет фона subview

UITableView reorder hides background

Subviews of UITableViewCell are not visible while reordering

Reordering causing subview 's backround color to clear

У меня есть обычай Tableview клетки с UILabel в нем. Когда tableview находится в режиме редактирования, и я перетаскиваю ячейку для изменения порядка, фон UILabel становится четким цветом. Я также обнаружил, что, если я попытаюсь переупорядочить выбранную ячейку (в моем режиме просмотра разрешен множественный выбор во время режима редактирования), цвет фона субвью остается.

Я попытался использовать методы в своем CustomCell, но ни один из них не переопределяет цвет фона подвью, когда таскается ячейка.

Я хочу, чтобы цвет фона подвидности оставался. Есть ли какой-нибудь метод, который я пропустил? Или Apple разработала его таким образом?

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    if (selected) { 
     if (self.isEditing) { 
      self.customLabel.backgroundColor = [UIColor blueColor]; 
     } 
     else { 
      self.customLabel.backgroundColor = [UIColor blueColor]; 
     } 
    } 
    else { 
      self.customLabel.backgroundColor = [UIColor blueColor]; 
    } 
} 

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { 
    [super setHighlighted:highlighted animated:animated]; 

    if (highlighted) { 
     if (self.isEditing) { 
      self.customLabel.backgroundColor = [UIColor blueColor]; 
     } 
     else { 
      self.customLabel.backgroundColor = [UIColor blueColor]; 
     } 
    } 
    else { 
     self.customLabel.backgroundColor = [UIColor blueColor]; 
    } 
} 

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    if (editing) { 
     self.customLabel.backgroundColor = [UIColor blueColor]; 
    } 
    else { 
     self.customLabel.backgroundColor = [UIColor blueColor]; 
    } 
} 

ответ

1

Вы можете создать свой пользовательский UILabel. И перегрузка -drawRect.

@interface VALAbel:UILabel 
@property (nonatomic, strong) UIColor *bac_color; 
@end 


@implementation VALabel 

-(void)setBac_color:(UIColor *)bac_color 
{ 
_bac_color = bac_color; 
[self setNeedsDisplay]; 
} 

- (void)drawRect:(CGRect)rect { 
    [self.bac_color set]; 

    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), true); 
    CGContextFillRect(UIGraphicsGetCurrentContext(), self.bounds); 

    [super drawRect:rect]; 
} 
@end 

Это поможет вам!

+0

Спасибо за ваш ответ! Я попробовал ваш ответ, и сейчас фона остается, но он меняет цвет фона на черный. Как я могу изменить этот цвет? – SFF

+0

Вы должны установить цвет при создании ярлыка в ячейке. self.customLabel.bac_color = [UIColor blueColor] – VladZ

+0

Спасибо! Пожалуйста, дайте мне немного времени. Он нуждается в некотором уходе, поэтому я вернусь к вам, когда это будет сделано. Похоже, что это сработает :) – SFF

2

Добавление современное решение для Swift 3.

Создать новый файл .swift и сделать пользовательский класс UIView:

import UIKit 

class NeverClearView: UIView { 
    override var backgroundColor: UIColor? { 
     didSet { 
      if backgroundColor?.cgColor.alpha == 0 { 
       backgroundColor = oldValue 
      } 
     } 
    } 
} 

В Interface Builder, перейдите к идентичности инспектора и установить класс ваш блестящий новый класс NeverClearView. Это остановит его от исчезновения во время переупорядочения ячейки.

Это решение также работает для других компонентов UIKit, например, я должен был сделать то же самое для UIStepper секунду назад.

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