8

我正在实现一个自定义 PopoverBackgroundView,正如Swift 文档中所指定的,我必须实现以下方法:

class SettingsPopoverBackgroundView: UIPopoverBackgroundView {

override var arrowOffset: CGFloat {
    get {
        return 0.0
    }
    set {
        super.arrowOffset = newValue
    }

}

override var arrowDirection: UIPopoverArrowDirection {
    get {
        return UIPopoverArrowDirection.Up
    }
    set {
        super.arrowDirection = newValue
    }
}

func contentViewInsets() -> UIEdgeInsets {
    return UIEdgeInsetsMake(10, 10, 10, 10)
}

func arrowBase() -> CGFloat {
    return 2.0
}

func arrowHeight() -> CGFloat {
    return 2.0
}
}

但是,我仍然收到错误消息:

UIPopoverBackgroundView contentViewInsets 必须由子类实现。

对于这个子类化,Apple 似乎有一些乱码异常,正如可以在这里看到的那样,因为我确实实现了 contentViewInsets,但仍然得到错误。

这就是我在 prepareForSegue 方法中将背景类设置为弹出框的方式:

popover.popoverBackgroundViewClass = SettingsPopoverBackgroundView.self

这样对吗?

谁能看到我做错了什么?

4

1 回答 1

12

contentViewInsets(), arrowBase(), 和arrowHeight()都是类函数,所以你需要在func这些函数前面加上“覆盖类”。

对于arrowOffsetand arrowDirection,文档说你的方法不能调用 super。我不确定您需要在这些设置器中放入什么(这取决于您要执行的操作),但是如果您将它们留空,则应用程序应该可以正常运行(尽管您不会看到箭头)。

于 2015-04-05T20:20:43.053 回答