自定义表格视图单元格不能刷新

我有一个TableViewController有一个自定义的原型单元格,在Storyboard中设置标识符“regularCell”。 TableViewController属于TimelineTableViewController.swift类,单元格是在Storyboard中设置的TimelineTableViewCell.swift.swift类。

在TimelineTableViewController.swift中:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.events.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCellWithIdentifier("regularCell", forIndexPath: indexPath) as! TimelineTableViewCell cell.selectionStyle = .None let event = events[indexPath.row] cell.content.text = event.content cell.name.text = event.name cell.metadata.text = event.metadata return cell } } 

在TimelineTableViewCell.swift中,我尝试使单元格可以滑动但没有任何反应,并且没有调用平移手势识别器。

 import UIKit class TimelineTableViewCell: UITableViewCell { var originalCenter = CGPoint() var deleteOnDragRelease = false @IBOutlet weak var name: UILabel! @IBOutlet weak var content: UILabel! @IBOutlet weak var metadata: UILabel! override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) var recognizer = UIPanGestureRecognizer(target: self, action: "handlePan:") recognizer.delegate = self addGestureRecognizer(recognizer) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func handlePan(recognizer: UIPanGestureRecognizer) { // 1 if recognizer.state == .Began { // when the gesture begins, record the current center location originalCenter = center } // 2 if recognizer.state == .Changed { let translation = recognizer.translationInView(self) center = CGPointMake(originalCenter.x + translation.x, originalCenter.y) // has the user dragged the item far enough to initiate a delete/complete? deleteOnDragRelease = frame.origin.x < -frame.size.width / 2.0 } // 3 if recognizer.state == .Ended { // the frame this cell had before user dragged it let originalFrame = CGRect(x: 0, y: frame.origin.y, width: bounds.size.width, height: bounds.size.height) if !deleteOnDragRelease { // if the item is not being deleted, snap back to the original location UIView.animateWithDuration(0.2, animations: {self.frame = originalFrame}) } } } override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer { let translation = panGestureRecognizer.translationInView(superview!) if fabs(translation.x) > fabs(translation.y) { return true } return false } return false } } 

会有人碰巧知道我在做什么错? 表中的单元格加载完美,但他们只是不能滑动,就好像我从来没有添加任何东西。 任何帮助或提示,不胜感激

终于搞明白了! 在添加手势识别器时,在awakeFromNib中这样做。 这是工作代码:

 override func awakeFromNib() { super.awakeFromNib() var panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePan:") panGestureRecognizer.delegate = self addGestureRecognizer(panGestureRecognizer) } func handlePan(recognizer: UIPanGestureRecognizer) { // 1 if recognizer.state == .Began { // when the gesture begins, record the current center location originalCenter = center } // 2 if recognizer.state == .Changed { let translation = recognizer.translationInView(self) center = CGPointMake(originalCenter.x + translation.x, originalCenter.y) // has the user dragged the item far enough to initiate a delete/complete? deleteOnDragRelease = frame.origin.x < -frame.size.width / 2.0 } // 3 if recognizer.state == .Ended { // the frame this cell had before user dragged it let originalFrame = CGRect(x: 0, y: frame.origin.y, width: bounds.size.width, height: bounds.size.height) if !deleteOnDragRelease { // if the item is not being deleted, snap back to the original location UIView.animateWithDuration(0.2, animations: {self.frame = originalFrame}) } } } override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool { if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer { let translation = panGestureRecognizer.translationInView(superview!) if fabs(translation.x) > fabs(translation.y) { return true } return false } return false } 

不要打扰重要的初始化。 朋友build议的另一种替代解决scheme是将滚动视图添加到单元格内容视图并从那里开始工作。 希望这可以帮助! 感谢所有的帮助!