0

プロパティ「isHidden」に応じてdelegate、クラスでカスタムの実装済みメソッドを非表示にする必要があります。2つの場所から1つを呼び出し、これらのクラスの1つからデリゲートメソッドを非表示にする必要があります。たとえば、クラスAとBはmyを呼び出し、このメソッドを。でチェックします。プロパティが、の場合、メソッドは値を返します。それ以外の場合は- 。これは可能ですか?UIViewControllerBOOLUIViewControllerUIViewControllerrespondsToSelector:@selector(myMethod)BOOLTRUErespondsToSelectorTRUEFALSE

4

3 に答える 3

2

デリゲートにこれらのメソッドを呼び出させます..そしてブール値に応じて、それらのタスクを実行するか、単に通過させます...

于 2012-08-16T08:33:41.267 に答える
1

ええと…ランタイムを介してセレクターの実装を交換することは可能ですが(たとえば、何もしない実装に)、それはひどい解決策です。そして、それはすべてのインスタンスに影響します-このアプローチはシングルトンを金のように見せます。

代わりに、に条件を導入するようなものを検討してmyMethodください。そうすれば、myMethodは動的に何もしません。

于 2012-08-16T08:33:05.330 に答える
1

次のようにデリゲート メソッドを定義するパターンがあります。

@protocol MyObjectDelegate <NSObject>

    - (void)myObject:(id)myObject processSomeData:(id)someData;

@end

したがって、デリゲート コントローラーは、どのオブジェクトがこのメソッドを要求しているかを認識し、何をすべきかを決定できます。さらに、このようなメソッドを追加して、実際にメッセージを送信する前に、このメソッドにアクセスする権利があるかどうかをオブジェクトに通知できます

- (BOOL)myObjectCanProcessSomeData:(id)myObject;

もちろん、Objective-C ランタイムとやり取りしてオブジェクト メソッドを追加および削除するテクニックはいくつかありますが、これが優れたアイデアかどうかはわかりません。

于 2012-08-16T08:45:47.117 に答える