我有一个包含一些
的tableView但是我希望它只显示章节标题,当我点击章节标题时,它会显示仅限该部分的所有员工详细信息。
以下是我的代码:
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
}
谢谢!
答案 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)
}
}