简单的iOS委托/回调

时间:2014-06-08 09:23:21

标签: ios objective-c callback delegates

我有一个简单的ViewController。在我放的.m文件中     #import" Manager.h"

有一个按钮,单击它时会执行以下代码:

Manager* manager = [[Manager alloc] init];
NSString* str = [manager doit];
NSLog(@"str = %@", str);

Manager是NSObject的子类。 在Manager.m我有这个方法:

- (NSString*)doit{
    return @"did it";
}

大。所有这些都按预期工作。

我需要的是,如果可能的话,如果是一个好的做法,发送/让经理理解,从方法doit 应该调用ViewController中的另一个方法。某种回调/委托。我该如何做到这一点?

我打电话的时候     [经理doit]; 我还想告知应该执行ViewController中的方法。 我希望你理解我的意思,否则我可以写更多细节。感谢

1 个答案:

答案 0 :(得分:1)

是的,您可以使用委托,您在Manager对象中的委托实现应如下所示:

@protocol managerDelegate <NSObject>

-(void)doSomthingAndGetThisString: (NSString *)stringText;

@end

@interface Manager : NSObject
@property (nonatomic,strong) id <managerDelegate>delegate;
@end

正如您所看到的,Manager对象在头部接口中声明了他的委托协议,因此任何类都可以在其上签名,如果他们这样做,他们应该预先形成方法&#34; doSomthingAndGetThisString&#34;。

每当&#34;经理&#34; object选择触发他将调用它的委托方法,如下所示:

- (NSString*)doit{
    //Call my delegate:
    [self.delegate doSomthingAndGetThisString:@"Passing this stringt to my delegate"];
    return @"did it";

}

的ViewController: ViewController需要保留manager对象的属性:

@property (nonatomic,strong) Manager *myManager;

现在当你分配&#34; myObject&#34;时,ViewController应该&#34;签署&#34;像这样预先形成代表:

  _myManager = [Manager new];
    _myManager.delegate = self;

当然有方法:

- (void)doSomthingAndGetThisString:(NSString *)stringText;

每当&#34;经理&#34;对象冷杉吧。

希望这有帮助