【问题标题】:Simple iOS delegate/callback简单的 iOS 委托/回调
【发布时间】:2014-06-08 09:23:20
【问题描述】:

我有一个简单的 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 中的一个方法。 我希望你明白我的意思,否则我可以写更多的细节。谢谢

【问题讨论】:

    标签: ios objective-c callback delegates


    【解决方案1】:

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

    @protocol managerDelegate <NSObject>
    
    -(void)doSomthingAndGetThisString: (NSString *)stringText;
    
    @end
    
    @interface Manager : NSObject
    @property (nonatomic,strong) id <managerDelegate>delegate;
    @end
    

    如您所见,Manager 对象在头接口中声明了他的委托协议,因此任何类都可以在其上签名,如果他们这样做,他们应该执行方法“doSomthingAndGetThisString”。

    每当“经理”对象选择触发委托方法时,他都会这样调用它:

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

    视图控制器: ViewController 需要保留 manager 对象的一个​​属性:

    @property (nonatomic,strong) Manager *myManager;
    

    现在,当您分配“myObject”时,ViewController 应该“签名”以执行委托,如下所示:

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

    当然还有方法:

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

    只要“Manager”对象启动它就会调用它。

    希望对你有帮助

    【讨论】:

    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多