2016-01-15 3 views
0

Я делаю это в моем IF clausure, в методе cellForRowAtIndexPath:Удалить эффект размытия в Tableview ячейки в Swift

let blurEffect = UIBlurEffect(style: .Light) 
     let visualEffect = UIVisualEffectView(effect: blurEffect) 

     visualEffect.frame = cell.attachedImage.bounds 

     cell.attachedImage.addSubview(visualEffect) 

В моей ELSE clausure Я хочу, чтобы удалить эффект от cell.attachedImage.

Как я могу это сделать?

ответ

3

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

Правильный подход заключается в создании подкласса ячеек, у которого уже установлены представления. Ваш подкласс может содержать свойства, которые ссылаются на представления, чтобы вы могли изменять, скрывать, перемещать или удалять их из своего супервизора по мере необходимости. Но логика этого должна быть в подклассе ячейки.

+0

Хороший вызов. Акцент на части «скрыть»: ячейки получают повторное использование, поэтому, если один экземпляр ячейки удаляет вид размытия для одной строки, то эта ячейка повторно используется для другой строки, которая хочет размытия, вам придется восстановить вид размытия. Скрытие/показ subview намного дешевле. – rickster

0

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

class CustomTableViewCell: UITableViewCell { 
    var visualEffectView: UIView? 
    var attachedImage: UIImageView! 
    // other views, including outlets 

    func setupIsBlurred(isBlurred: Bool) { 
     if isBlurred { 
      if self.visualEffectView == nil { 
       let blurEffect = UIBlurEffect(style: .Light) 
       let visualEffectView = UIVisualEffectView(effect: blurEffect) 

       visualEffectView.frame = self.attachedImage.bounds 

       self.attachedImage.addSubview(visualEffectView) 

       self.visualEffectView = visualEffectView 
      } 
     } else { 
      self.visualEffectView?.removeFromSuperview() 
      self.visualEffectView = nil 
     } 
    } 
} 
Смежные вопросы