我按照此post来实施UIPopoverBackgroundView
。我检查了UIPopoverBackgroundView
类,我认为我已经实现了所有必需的函数和变量,但运行时错误仍然存在。
由于未捕获的异常而终止应用 ' NSInternalInconsistencyException',原因:' - [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
协议的课程中找不到它。
答案 0 :(得分:0)
另一个博客post实际上显示了自定义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
}
}
这里没有超级调用,该类期望子类实际保存该值而不使用超类实现。