2

我有 3 个 viewController 类:vA、vB 和 vC。

我有一个关于 vA 的方法,例如:

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

我是 self.navigationController 推 vB。我希望 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 块。

我的问题是:我想将同样的方法转发给 vC,这是我将从 vB 推送的第三个 viewController。所以这是 vC,从 vA 运行一个方法:

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 回答