SegmentedControl隐藏并显示TableView单元格

时间:2016-03-18 13:57:11

标签: ios swift uitableview uisegmentedcontrol

我正在使用锻炼应用程序,用户可以使用UISwitch来设置锻炼是否有效。我有一个分段控制器,用于切换到显示"全部"或仅显示"活跃"。

是否可以在我的UISegmentedControl Action中获取具有此属性的特定单元格?

我的代码如下所示:

    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)
    }
}

所有这些都在同一个控制器中。

2 个答案:

答案 0 :(得分:0)

您应该有三个数据源数组:例如allItems activeItemsinactiveItems,并在它们之间切换。

tableView个委托中,检查使用segmentedControl选择的段,并使用正确的数组作为数据源。

segmentedControlChanged内调用self.tableView.reloadData()并使用所选的段设置变量。

答案 1 :(得分:0)

一种方法是跟踪" Active"的索引路径。数组中的单元格,它是视图控制器的实例属性。与切换分段控制器时相比,只需查看数组就可以确定从表视图中删除/添加的单元格。

另一个想法是在模型对象上拥有一个活动属性,用于保存每个表视图单元格的数据。当切换分段控件时,您可以迭代所有这些对象以确定它们是否“活动”#34;或不,并相应地进行。

从您提供的代码中,听起来我的第一个建议是最合适的。