2014-02-20 3 views
3

Работа над преобразованием приложения iOS6 в iOS7, и они используют это для настройки сгруппированного стиля таблицы.В iOS7, cell.selectedBackgroundView не отображается

cell.backgroundView = aView; 
    cell.selectedBackgroundView = bView; 

Когда приложение загружает, он загружает backgroundView правильно, но когда я нажимаю на ячейке selectedBackgroundView больше не работает в iOS7. Щелчок выбирает ячейку так, чтобы она работала, но selectBackgroundView просто не отображается.

Любые предложения? Единственное, что я могу думать, это не использовать selectedBackgroundView и просто добавлять и удалять subviews в ячейку каждый раз, когда они выбраны и не выбраны.

/// /// UPDATE

Put это в моем cellForRowAtIndex и до сих пор НЕ работу.

UIView *bgColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez 
    bgColorView.layer.masksToBounds = YES; 
    cell.selectedBackgroundView = bgColorView; 

//// UPDATE 2 ///////////

Если я кладу это в моем cellforRowAtIndex

cell.selectedBackgroundView = nil; 
    cell.backgroundView = nil; 
    UIView *bgColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez 
    bgColorView.layer.masksToBounds = YES; 
    cell.selectedBackgroundView = bgColorView; 

    UIView *bgSColorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    bgSColorView.backgroundColor = [UIColor colorWithRed:(106.0/255.0) green:(201.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez 
    bgSColorView.layer.masksToBounds = YES; 
    cell.backgroundView = bgSColorView; 

Оба шоу cell.background как bgSColorView , но когда я нажимаю на ячейку, ничего не происходит (иначе выбранный BackgroundView НЕ отображается? Почему выбранный BackgroundView не будет продвигаться и показываться?

/// UPDATE 3 //// Я положил t его в моем setSelectin: анимация: для моего класса ячеек (удалено выше).

UIView *bgColorView = [[UIView alloc] init]; 
bgColorView.backgroundColor = [UIColor colorWithRed:(76.0/255.0) green:(161.0/255.0) blue:(255.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez 
bgColorView.layer.masksToBounds = YES; 
self.selectedBackgroundView = bgColorView; 

UIView *bgSColorView = [[UIView alloc] init]; 
bgSColorView.backgroundColor = [UIColor colorWithRed:(106.0/255.0) green:(201.0/255.0) blue:(25.0/255.0) alpha:1.0]; // perfect color suggested by @mohamadHafez 
bgSColorView.layer.masksToBounds = YES; 
self.backgroundView = bgSColorView; 



[super setSelected:selected animated:animated]; 

Теперь оно кажется правильным, так как я хочу его. Но второй я нажимаю любую ячейку BOOOM, фон и selectionBackgroundView удаляются мгновенно, исчезают.

+0

В 7 Apple, сделал что-то с фоном ячейки. Они поместили непрозрачный белый слой в «выше» фона, и он исчезнет, ​​только если вы сделаете setBackgroundColor на ячейке * внутри * cellForRowAtIndexPath (сделать это в XIB недостаточно). Не уверен, как это может повлиять на фоновое изображение, но вам может потребоваться установить цвет фона для очистки. –

+0

Вы подклассифицируете 'UITableViewCell'? – sooper

+0

Да, это подклассы.Но я просто изменил его подкласс UITableViewCell и все тот же результат. – jdog

ответ

13

У меня была эта проблема недавно.

Нашел мою проблему в моем .xib У меня был selectionStyle, установленный в UITableViewCellSelectionStyleNone.

Как только я установил self.selectionStyle = UITableViewCellSelectionStyleDefault;, мой selectBackgroundView начал показывать правильно.

Так что я сделал это.

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    self.selectionStyle = UITableViewCellSelectionStyleDefault; 

    UIView *selectedBackgroundView = [[UIView alloc] init]; 
    selectedBackgroundView.backgroundColor = [UIColor redColor]; 
    self.selectedBackgroundView = selectedBackgroundView; 
} 
2

Всякий раз, когда я не могу заставить его работать в Tableview: cellForRowAtIndexPath: Я просто подкласс UITableViewCell и переопределить setSelected: анимационный метод, как так:

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

    // Configure the view for the selected state 
    UIImage *image = [UIImage imageNamed:@"selected_cell.png"]; 
    self.selectedBackgroundView = [[UIImageView alloc]initWithImage:image]; 
} 

Я просто попытался это в другом проекте, и это Бесполезный Не работай. Ха-ха. Вот что я использую сейчас:

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

      if (selected) { 
       contentView.backgroundColor = SharedColors.Blue.ToUIColor(); 
      } else { 
       contentView.backgroundColor = SharedColors.Black.ToUIColor(); 
      } 
     } 
+0

Но все, что настраивается при построении таблицы. Я делаю все это, не каждый раз, когда ячейка выбрана. Мне не нужно настраивать selectedBackgroundView на каждый setSelection, если я установил его в cellForRowAt ... правильно? – jdog

+0

Вы правы. Я не уверен, почему ваш cell.selectedBackgroundView = bView не работает, поэтому я просто хотел сообщить вам об обходном пути, если вам это нужно. Другая возможность состоит в том, чтобы работать с этим метод делегата: - (Недействительными) Tableview: (UITableView *) Tableview willDisplayCell: (UITableViewCell *) клетка forRowAtIndexPath: (NSIndexPath *) indexPath Она вызывается до того, как клетка втягивается и, возможно, быть другим хорошим обходным путем. – eckyzero

+0

Пробовал, и он не работает. – jdog

0
override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
    var view = UIView(frame: self.bounds) 
    view.backgroundColor = UIColor.redColor() 
    self.selectedBackgroundView = view 


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