如何在swift中点击节标题后显示节中的行数?

时间:2016-06-21 05:17:03

标签: swift tableview

我有一个包含一些

的tableView

enter image description here

但是我希望它只显示章节标题,当我点击章节标题时,它会显示仅限该部分的所有员工详细信息。

enter image description here

以下是我的代码:

 func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return company.count
}



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

    return company[section].employees!.count
}


 func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    if company[section].employees!.count < 1 {

        return nil
    }

    return company[section].companyName
}


 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! EmployeeTableViewCell
    let employeeDetails =  company[indexPath.section].employees!.allObjects as! [Employees]

    cell.lblName.text = employeeDetails[indexPath.row].employeeName
    cell.lblAddress.text = String(employeeDetails[indexPath.row].address!)
    cell.lblAge.text = String(employeeDetails[indexPath.row].age!)

    return cell
}

谢谢!

2 个答案:

答案 0 :(得分:6)

首先在标题视图上添加一个按钮,您可以调用扩展单元格的功能。

    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let titleHeader =  company[section].companyName // Also set on button
    let  headerCell = UIView(frame: CGRectMake(0   , 0, tableView.frame.size.width , 40 ))
    headerCell.backgroundColor = UIColor.whiteColor()

    let button  = UIButton(frame: headerCell.frame)
    button.addTarget(self, action: "selectedSectionStoredButtonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
  button.setTitle(titleHeader, forState: UIControlState.Normal)

    button.tag = section
    headerCell.addSubview(button)

    return headerCell
    }

现在在buttonclicked

上检查选定的标题视图
func selectedSectionStoredButtonClicked (sender : UIButton) {
    if (selectedArray.containsObject(sender.tag)){
        selectedArray.removeObject(sender.tag)
    }else{
        //selectedArray.removeAllObjects()  // Uncomment it If you don't want to show other section cell . 
        selectedArray.addObject(sender.tag)
    }
    tableViewObj.reloadData()
}

注意: - 这里我将 selectedArray 声明为 NSMutableArray 全局“tableViewObj”是您的tableview对象

现在进行最后的步骤。在 numberOfRowsInSection

中进行更改
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if (selectedArray.containsObject(section)){
        return  company[section].employees!.count

    }else{
        return 0
    }
}

尝试一下,它会正常工作,如果你有任何困惑而不是发表评论。

答案 1 :(得分:1)

创建类似

的变种
 var hiddenSections: [Int] = []

// TableView中

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return tempContact.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if hiddenSections.contains(section) {
        return 0
    }
    return tempContact[section].count
}

//在storyboard

中创建一个headerCell添加标签和一个按钮
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = tableView.dequeueReusableCellWithIdentifier("HeaderCell")! as! HeaderCell

    header._lblName.text = tempContact[section].NAME
     header._btnExpand.addTarget(self, action: "hideSection:", forControlEvents: .TouchUpInside)
    return header.contentView
}

//按钮单击

func hideSection(sender: UIButton) {
    if hiddenSections.contains(sender.tag) {
        hiddenSections.removeAtIndex(hiddenSections.indexOf(sender.tag)!)
        _tableView.reloadSections(NSIndexSet(index: sender.tag), withRowAnimation: .Automatic)
        _tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: sender.tag), atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
    }
    else {
        hiddenSections.append(sender.tag)
        _tableView.reloadSections(NSIndexSet(index: sender.tag), withRowAnimation: .Automatic)
    }
 }