【问题标题】:UIPanGestureRecognizer right and left tableviewcellUIPanGestureRecognizer 左右tableviewcell
【发布时间】:2016-09-25 06:21:34
【问题描述】:

现在,我正在开发一个 iOS 应用程序,它使用 UITableviewCell 的子类,它使用 UIPanGestureRecognizer 左右滑动,但 FavoritesTableViewCell 无法正常工作并出现错误。

错误:致命错误:不支持 NSCoding

UITableViewCell.swift

class FavoritesTableViewCell: UITableViewCell {

@IBOutlet weak var favimage: UIImageView!

@IBOutlet weak var texten: UILabel!

@IBOutlet weak var textfn: UILabel!

@IBOutlet weak var price: UILabel!

@IBOutlet weak var likeimage: UIImageView!

var originalCenter = CGPoint()
var deleteOnDragRelease = false
    override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state
}

required init(coder aDecoder: NSCoder) {
    fatalError("NSCoding not supported")
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    let recognizer = UIPanGestureRecognizer (target: self, action: "handlePan:")
    recognizer.delegate = self
    addGestureRecognizer(recognizer)
        }
//MARK: - horizontal pan gesture methods
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
}}

and my favourite storyboard

【问题讨论】:

    标签: ios swift uitableview uipangesturerecognizer


    【解决方案1】:

    评论或删除:

    required init(coder aDecoder: NSCoder) {
        fatalError("NSCoding not supported")
    }
    

    【讨论】:

      【解决方案2】:

      如果您按代码创建单元格,您的代码是可以的。


      如果您使用故事板创建单元格,则将调用required init(coder aDecoder: NSCoder) {

      当然,fatalError("NSCoding not supported")


      你也可以用这个

      required init?(coder: NSCoder) {
          super.init(coder: coder)
      }
      

      awakeFromNib()中进行初始化

      override func awakeFromNib() {
          super.awakeFromNib()
      
          let recognizer = UIPanGestureRecognizer (target: self, action: "handlePan:")
          recognizer.delegate = self
          addGestureRecognizer(recognizer)
              }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        • 2020-12-28
        • 1970-01-01
        • 2019-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多