在UITableView单元格内部如何显示指定的数组数据

时间:2016-09-21 20:20:32

标签: ios swift uitableview

我是Swift的新手,我正在尝试创建Tableview,其中我只有3行(早上,下午和晚上)。如果我单击Morning行,我的单元格必须展开。它必须显示时间为8 - 12的keynumber个用户数。下午和晚上相同。

我已指定User[]的数组数据,其中包含keynumber,时间和其他数据。

我尝试使用if中的cellForRowAtIndexPath条件,但它只显示Morning行的一个用户键。它在该特定时间限制内不显示其他用户密钥。

2 个答案:

答案 0 :(得分:1)

试试这个

IBAction

希望这有帮助。

答案 1 :(得分:0)

试一试,就像这里的魅力一样

struct User {
   var keynumber: Int
   var time: NSData
}

class TableViewController: UITableViewController {

var userArr : Array<User> = [] //raw user data

var sortedUser : [String : Array<User>] = ["Morning": [], "Afternoon": [], "Night": []]
var sectionStatusArr : [String: Bool] = ["Morning": false, "Afternoon": false, "Night": false] // section status array used to control expanding

override func viewDidLoad() {
    super.viewDidLoad()

    //classify user into corresponding group(time zone)
    for _ in 0...19 {
        let randomKey = Int( arc4random()%23)
        let user = User(keynumber: randomKey, time: NSData())

        userArr.append(user)
    }

    //sort user: 8-12 -> morning, 13-18 -> afternoon, 19-8 -> night
    for user in userArr{
        switch user.keynumber {
        case 8,9,10,11,12:
            sortedUser["Morning"]?.append(user)
        case 13,14,15,16,17,18:
            sortedUser["Afternoon"]?.append(user)
        default:
            sortedUser["Night"]?.append(user)
        }
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return sortedUser.keys.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows


    var rowcount = 0
    var shouldExpandSection = false
    switch section {
    case 0:
        rowcount = (sortedUser["Morning"]?.count)!
        shouldExpandSection = sectionStatusArr["Morning"]!
    case 1:
        rowcount = (sortedUser["Afternoon"]?.count)!
        shouldExpandSection = sectionStatusArr["Afternoon"]!
    default:
        rowcount = (sortedUser["Night"]?.count)!
        shouldExpandSection = sectionStatusArr["Night"]!
    }
    return shouldExpandSection ? rowcount : 0
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 40
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 60
}

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 60))

    let nameBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 375, height: 60))
    nameBtn.backgroundColor = UIColor.cyan
    nameBtn.tag = section
    nameBtn.addTarget(self, action: #selector(self.headerTouched(sender:)), for: .touchUpInside)

    switch section {
    case 0:
        nameBtn.setTitle("Morning", for: .normal)
    case 1:
        nameBtn.setTitle("Afternoon", for: .normal)
    default:
        nameBtn.setTitle("Night", for: .normal)
    }

    header.addSubview(nameBtn)

    return header
}

func headerTouched(sender:UIButton){
    switch sender.tag {
    case 0:
        sectionStatusArr["Morning"] = !sectionStatusArr["Morning"]!
    case 1:
        sectionStatusArr["Afternoon"] = !sectionStatusArr["Afternoon"]!
    default:
        sectionStatusArr["Night"] = !sectionStatusArr["Night"]!
    }
    self.tableView.reloadData()
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    var sectionArr : Array<User>= []
    switch indexPath.section {
    case 0:
        sectionArr = sortedUser["Morning"]!
    case 1:
        sectionArr = sortedUser["Afternoon"]!
    default:
        sectionArr = sortedUser["Night"]!
    }

    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)

    for subview in cell.subviews{
        subview.removeFromSuperview()
    }

    let lab = UILabel(frame: CGRect(x: 0, y: 0, width: 375, height: 40))
    lab.text = "Un:" + String(sectionArr[indexPath.row].keynumber)
    lab.textAlignment = .center
    cell.addSubview(lab)

    return cell
}

}