【问题标题】:Compiler not liking UIScrollViewDelegate with Swift编译器不喜欢 Swift 的 UIScrollViewDelegate
【发布时间】:2015-11-23 13:49:52
【问题描述】:

在将UIScrollView 实现为UITableViewCell 时出现错误。

class MyItemTableViewCell: UITableViewCell, UIScrollViewDelegate {

...  

var scrollView: UIScrollView = {
        let scroll = UIScrollView()
        scroll.showsHorizontalScrollIndicator = false
        scroll.delegate = self
        return scroll;
        }()

...

func scrollViewDidScroll(scrollView: UIScrollView!) {
     ...   
    }

func scrollViewWillEndDragging(scrollView: UIScrollView!, velocity: CGPoint, targetContentOffset: CMutablePointer<CGPoint>) {
     ...   
    }
...
}

编译器在scroll.delegate = self 行给我一个错误,说Type MyItemTableViewCell does not conform to protocol ‘UIScrollViewDelegate’

没关系,协议中的方法都被记录为可选(https://developer.apple.com/library/prerelease/iOS/documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/index.html),但我已经实现了两个。

编译器想从我这里得到什么?

谢谢

【问题讨论】:

标签: ios swift


【解决方案1】:

在初始化周期中,在所有属性都初始化之前,self 是不可用的。将其更改为:

class MyItemTableViewCell: UITableViewCell, UIScrollViewDelegate {

    var scrollView: UIScrollView

    func scrollViewDidScroll(scrollView: UIScrollView!) {
    }

    func scrollViewWillEndDragging(scrollView: UIScrollView!, velocity: CGPoint, inout targetContentOffset: CGPoint) {
    }

    init() {
        scrollView = UIScrollView()
        scrollView.showsHorizontalScrollIndicator = false
        super.init(style:UITableViewCellStyle.Default, reuseIdentifier:"cell")
        scrollView.delegate = self
    }
}

【讨论】:

  • inout X:TX:CMutablePointer&lt;T&gt; 的同义词,因此请使用更适合您的方式。
  • 我可以在 ViewController 中调用 func scrollViewDidScroll 吗?
  • @LiamShalon 您可以,但您可能想考虑将功能提取到您直接调用的非委托方法中,并从scrollViewDidScroll
  • 但是,如何在 ViewController 中实现该功能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多