2

vA、vB、vC の 3 つの viewController クラスがあります。

次のような vA のメソッドがあります。

- (void) showMessage:(NSString *)message withTitle:(NSString *)title {
 ...  bla bla
}

私は vB をプッシュする self.navigationController です。vB で vA からこのメソッドを実行したいので、vB で次のようにプロパティを作成しました。

@property (nonatomic, strong) void (^showMessage)(NSString *message, NSString *title);

vA 内に vB を作成し、それをプッシュする直前に、次のようにします。

vB.showMessage = ^(NSString *message, NSString *title){
        [myself showMessage:message withTitle:title];
};

vB から showMessage ブロックを呼び出すことができます。

私の問題は次のとおりです。vB からプッシュする 3 番目の viewController である vC に、この同じメソッドを転送したいと考えています。したがって、これは vA からメソッドを実行する vC です。

vA pushing vB pushing vC

それをvCに転送する簡単な方法はありますか、それともvCで別の同等のプロパティを作成し、メソッドをブロックにラップするということをすべて繰り返す必要がありますか? すでにブロックであるため、これが当てはまる場合は、次のことを行う必要があります。

vC.showMessage = ^(NSString *message, NSString *title){
        self.showMessage(message, title);
};

右?

今後もこのブロックを使い続けたいと思います。私はそれに恋をしています。

通知、デリゲートなどを使用できることはわかっていますが、このブロックの新しいものはよりシンプルで、コードがタイトになります。

4

1 に答える 1

1

vC.showMessage = self.showMessage;にプッシュする前に割り当てることができますvC。次に電話vC.showMessagae(message, title);するか、にいるときにvC使用しますself.showMessage(message, title);

このようにしてみて、

vA.hファイルで、

追加、

typedef void (^ShowMessageBlock)(NSString *message, NSString *title);

vA.h次に、ファイルをファイルにインポートvB.hして宣言し、

@property (nonatomic, strong) ShowMessageBlock showMessage;

vC.hファイルでも同じ宣言を行います。

その後、 にプッシュしているときはvB

vB.showMessage = ^(NSString *message, NSString *title){
        [myself showMessage:message withTitle:title];
};

にプッシュしているときはvC

vC.showMessage = self.showMessage;

self.showMessage(@"", @"");その後、両方のクラスで使用できます。

于 2012-11-07T20:15:47.820 に答える