私のアプリでは、CustomLabel, CustomView, CustomTextField
などのインターフェイス要素があります(すべてカスタムクラスは基本クラスから継承します)UIView, UILabel, UITextField
この時点では、各要素DrawRect
自分自身にアンダーラインを描画する関数へのコールバックと基本的には、各サブクラスに重複したコードの塊があります またはを必要としないので、extension
をUIView
に作成せずに、 subclass
のUIView
この現象が発生します。UITextField、UILabel、UIViewカスタムクラスにカスタム機能を追加する
0
A
答えて
3
このために、プロトコルとプロトコル拡張を使用して、共通メソッドをサブクラスに追加することができます。次に、クラスをそのプロトコルに準拠させ、プロトコルからメソッドを呼び出すためにdrawRectをオーバーライドするだけです。残念ながら、プロトコルに準拠し、他の変更を行わずに新しい動作を追加することは不可能です。プロトコル拡張のメソッドをオーバーライドすることはできません。メソッドのスウィズルを可能にするObjective-Cランタイムを使用するメソッドを追加することはできません。
のコードでは、これは次のようになります:
protocol CustomDrawing {}
extension CustomDrawing where Self: UIView {
func myDrawingCode() {
// Whatever
}
}
をあなたは、このようにそれを使用します。
class CustomLabel: UILabel, CustomDrawing {
override func draw(_ rect: CGRect) {
super.draw(rect)
myDrawingCode()
}
}
あなたがする必要がありますmyDrawingCode()
でいくつかの共通のプロパティまたはメソッドにアクセスする必要がある場合それらをCustomDrawingプロトコルの中で宣言してください。プロトコル拡張がUIViewとサブタイプに制約されているため、UIViewメソッドを使用できます。
関連する問題
- 1. カスタムTableViewCellにUITextFieldを追加する
- 2. チャンネルにカスタム機能を追加する
- 3. カスタムUIViewをUIAlertControllerに追加する
- 4. カスタムFlvプレーヤー - 機能を追加する
- 5. UILabelにスクロール機能を追加する方法
- 6. 再利用可能なカスタムUIViewを複数のUIViewControllersに追加
- 7. カスタム機能を追加するためにjavascriptをフェッチする
- 8. UIViewのコントロールがuiwindowにuiviewを追加した後に機能しない
- 9. UINavigationbarのタイトルビューでカスタムUIViewを追加
- 10. iOSジェスチャー処理:カスタムUIViewを使用するときにジェスチャー認識機能を追加する場所
- 11. WordPressにカスタム機能を追加するには
- 12. 、Robo3Tのカスタム機能の追加方法
- 13. カスタムクラスなしでUICollectionViewCellにUILabelをどのように追加しますか?
- 14. Chromeのコンソールにカスタム機能を追加する
- 15. arkitのscnviewにカスタムUIViewを追加する方法は?
- 16. カスタムUiViewでUiTextFieldデリゲートメソッドを設定する場所
- 17. UICollectionViewCellでUILabelのUIViewアニメーションブロックが機能しない
- 18. CALayerをUIViewに追加して向き変更を再描画する機能
- 19. WordPressの投稿にカスタム機能を追加しますか?
- 20. UITcrollVewのUITextFieldとUILabel
- 21. MonoTouchを使用してUIViewにUITextFieldをプログラムで追加します。
- 22. Torchでカスタム損失機能を追加する
- 23. AcumaticaカスタムISV製品のライセンスキー機能を追加する方法
- 24. Concrete5テーマにカスタムクラスを追加する
- 25. md-tooltipにカスタムクラスを追加する
- 26. カスタムクラスのコレクションをSettings.Settingsに追加する
- 27. カスタムクラスにプロパティを追加する
- 28. 角2 - カスタムクラスを追加するには?
- 29. UITextFieldにクリアボタンを追加するには?
- 30. UITextFieldにUILongPressGestureRecognizerを追加するには?
残念ながら、 'UIView'が一般的なスーパークラスであるため、できません – Paulw11
これは正しい方法で管理できますか? –
それを見て、ありがとう! –