2015-10-07 2 views
0

У меня есть UITableView, который я использую для отображения настроек для моего приложения. То, что я хочу достичь, - это анимация двух UITableViewCell s, когда значение UISwitch изменяется.Анимация Вставка и удаление UITableViewCell через UISwitch

Несколько приятных примеров - настройки Wi-Fi в настройках iOS. Когда вы выключаете Wi-Fi, разделы ниже этой ячейки исчезают и вверх, пока они не исчезнут. И наоборот, они исчезают, когда Wi-Fi включен. Кроме того, Tweetbot 4 прекрасно это делает в настройках экрана при выборе параметра в разделе «Тема». Когда это разрешено, две клетки движутся вверх до тех пор, пока не исчезнут, а затем одна клетка движется вниз, чтобы занять место двух других ячеек.

Я смог найти tutorial with gifs для достижения скрытия и отображения ячеек, однако без анимации. Вместо этого клетки просто исчезают и появляются внезапно.

Мой tableView:heightForRowAtIndexPath: метод выглядит следующим образом:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.row == 1 && authenticationSettingsSwitch.on == false { 
     return 0 
    } 
    if indexPath.row == 2 && authenticationSettingsSwitch.on == false { 
      return 0 
    } 
    return 44 
} 

Если переключатель включен, две клетки видны с высоты 44. Если переключатель выключен, две ячейки сбрасываются с высотой 0.

Вышеупомянутое происходит в методе действия моих UISwitch «S:

@IBAction func authenticationSettingsSwitchFlipped(sender: UISwitch) { 
    let requireAuthentication = sender.on == true ? true : false 
    defaults.setBool(requireAuthentication, forKey: Settings.Authentication.rawValue) 
    defaults.synchronize() 
    if requireAuthentication { 
     delay(0.3) {() -> Void in 
      let authenticationNavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("authenticationNavigationController") as! UINavigationController 
      let authenticationViewController = authenticationNavigationController.topViewController as! AuthenticationViewController 
      authenticationViewController.settingsDelegate = self 
      self.presentViewController(authenticationNavigationController, animated: true, completion: nil) 
     } 
    } else { 
     tableView.reloadData() 
    } 
} 

Я также смотрел на tableView:insertRowsAtIndexPaths:withRowAnimation, однако, я получаю сбои в попытке вызвать этот метод без использования источника данных, так как клетки являются статическими.

Ниже приведены несколько скриншотов, которые могут помочь вам увидеть более ясно, что я хотел:

enter image description here

Как уже говорилось выше, я могу получить клетки появляются и исчезают через UISwitch в первом cell (верхний набор скриншотов), но они делают это круто. В нижнем наборе скриншотов (Tweetbot 4) анимация великолепна и плавная.

Может ли кто-нибудь указать мне, как достичь того, что я хочу?

+0

Не знаю, как это сделать со статическими ячейками. Спасибо за вызов, хотя. Я сделал несколько минут и раздавил пример с использованием динамических ячеек. Просто чтобы доказать, что я могу это сделать. Не уверен, что это поможет вам. https://github.com/regnerjr/HideAndShowTableViewCellsBasedOnSwitch – JMFR

ответ

0

Я нашел решение, обеспечивающее приятную анимацию для показа/скрытия статического UITableViewCell s here.

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