Swift:可扩展的静态TableView

时间:2017-06-09 02:04:21

标签: swift uitableview expand

在发布此帖子之前,我已经阅读了一些文章,例如this或此enter link description here,但所有这些示例都始终使用dinamic数据。我想知道如何在静态数据中实现可扩展的tableview。我认为这更简单,但我不知道。我的代码段:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if (indexPath.section == 1) {
        if indexPath.row == self.department {
            cell.accessoryType = .checkmark
        } else {
            cell.accessoryType = .none
        }
    }

    if indexPath.section == 0 {
        if indexPath.row == 2 {
            datePickerFrom.isHidden = true
        }
        else if indexPath.row == 4 {
            datePickerUntil.isHidden = true
        }
    }

}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: false)

    if indexPath.section == 1 {
        let lastDepartment = self.department
        self.department = indexPath.row

        tableView.reloadRows(at: [indexPath, IndexPath.init(row: lastDepartment, section: 1)], with: .none)
    }

    if indexPath.section == 0 {
        if indexPath.row == 2 {
            datePickerFrom.isHidden = false
        }
        else if indexPath.row == 4 {
            datePickerUntil.isHidden = false
        }

        tableView.reloadData()
    }
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count = 0
    if section == 0 {


    } else if section == 1 {
        count = 2
    } else if section == 2 || section == 3 {
        count = 1
    }

    return count
}

假设我有4个部分。我希望make第一部分可扩展,但使用静态表,单元格和静态数据。任何建议对我都有帮助。在此先感谢。

2 个答案:

答案 0 :(得分:3)

来自Apple's developer site

  

静态单元格:使用静态内容来设计整体布局   表,包括单元格总数。带静态的表视图   content有一组固定的单元格,您可以在设计时进行配置   时间。您还可以配置其他静态数据元素,例如   节标题。当表不更改时,请使用静态单元格   布局,无论它显示的具体信息如何

在您的方案中,由于您使用的是动态数据源,因此您必须进行表格查看dynamic

答案 1 :(得分:0)

我解决了。我读了一些使用Bool值并设置高度来管理展开和折叠单元格的示例。这是我的最终代码:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: false)

    if indexPath.section == 1 {
        let lastDepartment = self.department
        self.department = indexPath.row

        tableView.reloadRows(at: [indexPath, IndexPath.init(row: lastDepartment, section: 1)], with: .none)
    }

    if indexPath.section == 0 && indexPath.row == 1 {

        if !isExpandToDate {
            if isExpandFromDate {
                isExpandFromDate = !isExpandFromDate
                isExpandToDate = !isExpandToDate
            } else {
                isExpandFromDate = !isExpandFromDate
            }
        } else {
            if isExpandFromDate {
                isExpandFromDate = !isExpandToDate
            } else {
                isExpandFromDate = !isExpandFromDate
            }
        }
    }

    if indexPath.section == 0 && indexPath.row == 3 {

        if !isExpandFromDate {
            if isExpandToDate {
                isExpandToDate = !isExpandToDate
                isExpandFromDate = !isExpandFromDate
            } else {
                isExpandToDate = !isExpandToDate
            }
        } else {
            if isExpandToDate {
                isExpandToDate = !isExpandFromDate
            } else {
                isExpandToDate = !isExpandToDate
            }
        }
    }

    tableView.beginUpdates()
    tableView.endUpdates()
}


override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if isExpandFromDate && indexPath.section == 0 && indexPath.row == 2 {
        return 0
    }
    else if isExpandToDate && indexPath.section == 0 && indexPath.row == 4 {
        return 0
    }
    else {
        return super.tableView(tableView, heightForRowAt: indexPath)
    }
}