我按照这篇文章实现了UIPopoverBackgroundView
。我检查了UIPopoverBackgroundView
类,我想我已经实现了所有必需的函数和变量,但是运行时错误仍然存在。
由于未捕获的异常而终止应用 'NSInternalInconsistencyException', reason: '-[UIPopoverBackgroundView setArrowOffset:] 必须由子类器实现。
import UIKit
class CustomPopoverBackground: UIPopoverBackgroundView {
override func layoutSubviews() {
super.layoutSubviews()
}
override var arrowOffset: CGFloat {
get {
return 0.0
}
set {
super.arrowOffset = newValue
}
}
override var arrowDirection: UIPopoverArrowDirection {
get {
return UIPopoverArrowDirection.Up
}
set {
super.arrowDirection = newValue
}
}
override class func contentViewInsets() -> UIEdgeInsets {
return UIEdgeInsetsMake(10, 10, 10, 10)
}
override class func arrowBase() -> CGFloat {
return 2.0
}
override class func arrowHeight() -> CGFloat {
return 2.0
}
}
我哪里错了?setArrowOffset
是什么,我在UIPopoverBackgroundView
类或UIPopoverBackgroundViewMethods
协议中没有找到它。
另一篇实际展示自定义UIPopOverBackgroundView
实现的博客文章
它将箭头保存在结构中
private struct Arrow {
let height : CGFloat = 30.0
let base : CGFloat = 20.0
var direction : Direction = .UP
var offset : CGFloat = 0.0
}
override var arrowOffset: CGFloat {
get {
return arrow.offset
}
set {
arrow.offset = newValue
}
}
这里没有超级调用,类期望子类实际保存值而不是使用超类实现。