2

私はこれに不慣れで、サブクラス化の実装に頭を悩ませようとしています。

新しいファイルを作成し、それを任意の親クラスのサブクラスにすることの基本を理解しています(この場合はUITextFieldを選択しました)。独自のサブクラスを作成し、適切なUITextFieldオブジェクトのIDインスペクターのクラスを、単に「myTextField」と呼ばれる新しいクラスに変更しました。SOの他の場所にあるコードを使用して、プレースホルダーテキストの表示を変更しましたが、(サブクラス化されたオブジェクトから)正常に機能します。

私は(ストーリーボードで)viewControllerをサブクラス化されたtextFieldsのデリゲートにしました。

また、必要に応じて適切なメソッドが起動します。たとえば、textFieldShouldReturnメソッドは、ViewControllers.mファイル内の[戻る]ボタンでアクティブになります。

しかし、これらのメソッドはビューコントローラーでのみ起動し、サブクラス内では起動しません。ビューコントローラがこれらを処理する前に、これらにアクセスしたいと思います。

言い換えると、必要に応じて起動したいのですが、サブクラス化されたオブジェクトでアクションを実行したいのですが、メインファイルで完全なメソッドを起動します。例として、ユーザーがリターンキーを押したときに、サブクラス化されたオブジェクトがキーボードのドロップを直接処理するようにしますが、それでもviewcontrollersメソッドを起動します。

これは単なる例であり、おそらく貧弱なものですが、アイデアは、メインのビューコントローラの元のメソッドの機能を必ずしも奪いたくはなく、それでもデリゲートにしたいということです。サブクラス化されたオブジェクトファイルにもいくつかの作業を実行させたいだけです。この例では、キーボードをドロップして音を鳴らすことができます。私が言ったように、それは例であり、アクション自体は無関係です。しかし、私が望む場所で実行するアクションを取得することが問題です。

サブクラス化に頭を悩ませていないことは承知しています。かなり基本的なことを見逃してしまった場合は、事前に申し訳ありません。

私はこれに関するポインタをいただければ幸いです、ありがとう

4

1 に答える 1

2

サブクラス化をよく理解しているように聞こえますが、委譲に問題がある可能性があります。

デリゲートのポイントは、別のオブジェクトに代わって何らかの作業を行う1 つの (唯一の)オブジェクトがあることです。何かに反応するために複数のオブジェクトが必要になった場合は、通知の方が優れた戦略です。

あなたの例には2つのオプションがあります。1 つは、デリゲートがサブクラスのメソッドを明示的に呼び出すようにすることです。もう 1 つは、デリゲート メソッドにカスタム通知を投稿させ、必要なオブジェクトがそれに反応できるようにすることです。

どちらを選択するかは、ソリューションをどの程度一般的または具体的にしたいかによって異なります。

于 2012-11-24T14:03:36.323 に答える