1

xCode アップデート 6.3 の後、私はこの問題を抱えています:

私のSwiftコードは次のとおりです。

extension UITextField{      

    func editingRectForBounds(bounds: CGRect) -> CGRect{

        if self.leftView != nil {

            let textFieldPadding : CGFloat = 24.0
            return CGRectMake(bounds.origin.x + textFieldPadding, bounds.origin.y, bounds.size.width+textFieldPadding*2, bounds.size.height)
        } else {
            return textRectForBounds(bounds)
        }
    }

     func  textRectForBounds(bounds: CGRect) -> CGRect {

        if self.leftView != nil {

            let textFieldPadding : CGFloat = 24.0
            return CGRectMake(bounds.origin.x + textFieldPadding, bounds.origin.y, bounds.size.width+textFieldPadding*2, bounds.size.height)
        } else {
            let textFieldPadding : CGFloat = 8.0
            return CGRectMake(bounds.origin.x + textFieldPadding, bounds.origin.y, bounds.size.width+textFieldPadding*2, bounds.size.height)
        }
    }
}

このエラーの理由がわかりません。プロジェクトでは、UITextField の拡張機能の別のカテゴリが定義されていません...

4

3 に答える 3

4

editingRectForBoundsすでに UITextField に存在するので、おそらくそうすべきoverrideです。

ドキュメントから:

このメソッドを直接呼び出さないでください。テキストに別の編集用の四角形を提供する場合は、このメソッドをオーバーライドしてその四角形を返すことができます。

編集:

これを extension で使用する必要があるとは、以前は知りませんでした。繰り返しますが、ドキュメントを信じていて、今回はあなたが望むものについて間違っていなければ、問題があります:

拡張機能を使用して、Objective-C 型の既存のメソッドまたはプロパティをオーバーライドすることはできません。

于 2015-04-13T15:00:03.370 に答える
0

関数をオーバーライドできますが、パブリックとして宣言する必要があります。エラーは

インスタンス メソッドのオーバーライドは、オーバーライドする宣言と同じくらいアクセス可能でなければなりません

UITextField を拡張するために私が取り組んできた例を次に示します

override public func becomeFirstResponder() -> Bool
于 2016-01-28T16:00:30.207 に答える