我有一个简单的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中的方法。 我希望你理解我的意思,否则我可以写更多细节。感谢
答案 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;对象冷杉吧。
希望这有帮助