我能够展开和折叠单元格,但我想在UITableViewCell内调用函数(展开和折叠)以更改按钮标题。
导入UIKit 类MyTicketsTableViewController:UITableViewController { var selectedIndexPath:NSIndexPath? var extraHeight:CGFloat = 100 覆盖func viewDidLoad(){ super.viewDidLoad() } 覆盖func didReceiveMemoryWarning(){ super.didReceiveMemoryWarning() //处理所有可以重新创建的资源。 } 覆盖func tableView(tableView:UITableView,numberOfRowsInSection部分:Int)-> Int { 返回5 } 覆盖func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)-> UITableViewCell { 让cell = tableView.dequeueReusableCellWithIdentifier(“ cell”,forIndexPath:indexPath)为!MyTicketsTableViewCell 返回单元 } 覆盖func tableView(tableView:UITableView,heightForRowAtIndexPath indexPath:NSIndexPath)-> CGFloat { if(selectedIndexPath!= nil && indexPath.compare(selectedIndexPath!)== NSComparisonResult.OrderedSame){ 返回230 + extraHeight } 回报230.0 } 覆盖func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath){ if(selectedIndexPath == indexPath){ selectedIndexPath =无 }其他{ selectedIndexPath = indexPath } tableView.beginUpdates() tableView.endUpdates() } } 导入UIKit 类MyTicketsTableViewCell:UITableViewCell { @IBOutlet弱var expandButton:ExpandButton! @IBOutlet弱var detailsHeightConstraint:NSLayoutConstraint! var defaultHeight:CGFloat! 覆盖func awakeFromNib(){ super.awakeFromNib() defaultHeight = detailsHeightConstraint.constant expandButton.button.setTitle(“ TAP FOR DETAILS”,forState:.Normal) detailsHeightConstraint.constant = 30 } func expand(){ UIView.animateWithDuration(0.3,延迟:0.0,选项:.CurveLinear,动画:{ self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 0.99)) self.detailsHeightConstraint.constant = self.defaultHeight self.layoutIfNeeded() },完成:{已完成 self.expandButton.button.setTitle(“ CLOSE”,forState:.Normal) }) } func crash(){ UIView.animateWithDuration(0.3,延迟:0.0,选项:.CurveLinear,动画:{ self.expandButton.arrowImage.transform = CGAffineTransformMakeRotation(CGFloat(M_PI * 0.0)) self.detailsHeightConstraint.constant = CGFloat(30.0) self.layoutIfNeeded() },完成:{已完成 self.expandButton.button.setTitle(“ TAP FOR DETAILS”,forState:.Normal) }) } }
如果你想在细胞获得更大的身体,那么,你有你的店IndexPath,在heightForRow:使用:
IndexPath
heightForRow:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { if selectedIndexPath == indexPath { return 230 + extraHeight } return 230.0 }
然后,当您想在didSelectRow中展开一个时:
selectedIndexPath = indexPath tableView.beginUpdates tableView.endUpdates
编辑
这将使单元动画自己变大,您不需要单元中额外的动画块。
编辑2
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if(selectedIndexPath == indexPath) { selectedIndexPath = nil if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyTicketsTableViewCell { cell.collapse() } if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow:indexPath.row+1, section: indexPath.section) as? MyTicketsTableViewCell { cell.collapse() } } else { selectedIndexPath = indexPath if let cell = tableView.cellForRowAtIndexPath(indexPath) as? MyTicketsTableViewCell { cell.expand() } if let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow:indexPath.row+1, section: indexPath.section) as? MyTicketsTableViewCell { cell.expand() } } tableView.beginUpdates() tableView.endUpdates() }