2016-03-18 2 views
0

Я работаю над приложением упражнений, где пользователь может использовать UISwitch, чтобы установить, активно или нет упражнение. У меня есть сегментированный контроллер, который используется для переключения на отображение «Все» или только для показа «Активный».SegmentedControl скрыть и показать ячейки TableView

Возможно ли получить конкретные ячейки с этим свойством в моем действии UISegmentedControl?

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

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 20 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if let cell = tableView.dequeueReusableCellWithIdentifier("ChallengeCell") as? ChallengeListCell { 
     cell.setTitle("Utmaning " + String(indexPath.row + 1)) 
     let active = indexPath.row % 3 == 0 || indexPath.row % 5 == 0 
     cell.setActive(active) 
     if active { 
      cell.setCompleted((Double(indexPath.row % 5) + Double(indexPath.row % 3))/6.0) 
     } 
     else { 
      cell.setCompleted(0) 
     } 
     return cell 
    } 
    return UITableViewCell() 
} 

и моя функция SegmentedControl выглядит следующим образом:

@IBAction func segmentedControlChanged(sender: UISegmentedControl) { 
    let selectedSegment = segmentedControl!.selectedSegmentIndex 
    switch selectedSegment{ 
    case 0: //SHOW ALL 
     print("Selected 0") 
    case 1: //SHOW ONLY ACTIVE 
     print("Selected 1") 
    //case 2: //NOT ACTIVE 
     //print("Selected 2") 
    default: 
     print(sender) 
    } 
} 

Все это находится в том же контроллере.

ответ

0

У вас должно быть три массива источников данных: например, allItemsactiveItems и inactiveItems и переключаться между ними.

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

Внутри segmentedControlChanged вызовите self.tableView.reloadData() и установите переменную с выбранным сегментом.

+0

Работал отлично, обе ваши идеи. Спасибо! – Fredrik

0

Одним из способов было бы отслеживать пути указателей «Активные» ячейки в массиве, который является свойством экземпляра вашего контроллера представлений. Затем, когда сегментированный контроллер переключается, вы можете определить, какие ячейки удалить/добавить из представления таблицы, просто взглянув на массив.

Другой идеей было бы иметь активное свойство на объектах модели, которые хранят данные для каждой ячейки представления таблицы. Когда сегментированный элемент управления переключается, вы можете перебирать все эти объекты, чтобы определить, являются ли они «активными» или нет и действуют соответственно.

Из вашего кода, это похоже на то, что мое первое предложение было бы наиболее подходящим.

+0

Спасибо за ваш ответ, я проверю это! – Fredrik