1

この投稿に従って、を実装し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のクラスで見つかりませんでした。UIPopoverBackgroundViewUIPopoverBackgroundViewMethods

4

1 に答える 1

0

カスタムの実装を実際に示す別のブログ投稿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
    }
}

ここではスーパー コールはありません。クラスは、サブクラスが実際に値を保持し、スーパークラスの実装を使用しないことを期待しています。

于 2016-06-05T05:40:30.400 に答える