This question already has answers here:
How to perform Callbacks in Objective-C

(5个答案)


8年前关闭。




我无法弄清楚如何创建一个函数,该函数会将信息提供给父对象,并且已经完成了某些工作,因此我需要您的帮助。
例如我想做什么:
  • ViewController 类实例化类 BottomView 并将其添加为 subview 。
  • 调用 BottomView 类的实例来启动动画。
  • 动画结束后,我想向 ViewController 类表明动画已经结束,它可以从自身释放/删除一个实例 BottomView

  • 我需要类似回调的东西。
    你能帮忙吗?

    最佳答案

    1.你可以用积木来做!

    您可以将一些块传递给BottomView。

    2. 或者你可以用 target-action 来做。

    你可以传递给 BottomView 选择器 @selector(myMethod:) 作为 Action ,
    并将指向 View Controller 的指针作为目标。动画结束后
    使用 performeSelector: 方法。

    3. 或者你可以定义委托(delegate)@protocol 并在你的viewController 中实现方法,
    并在BottomView中添加委托(delegate)属性。
    @property (assign) id 委托(delegate);

    如果你在你的BottomView中做一些动画,你可以使用
    UIView 方法

    animateWithDuration:delay:options:animations:completion:
    

    使用块作为回调
    [UIView animateWithDuration:1.0f animations:^{
    
        }];
    

    更新:

    在 ButtomView.h 中
    @class BottomView;
    
    @protocol BottomViewDelegate <NSObject>
    
    - (void)bottomViewAnimationDone:(BottomView *) bottomView;
    
    @end
    
    
    @interface BottomView : UIView
    
    @property (nonatomic, assign) id <BottomViewDelegate> delegate;
    
    .....
    @end
    

    在 ButtomView.m 中
    - (void)notifyDelegateAboutAnimationDone {
       if ([self.delegate respondsToSelector:@selector(bottomViewAnimationDone:)]) {
          [self.delegate bottomViewAnimationDone:self];
       }
    }
    

    在动画编译后,您应该调用 [self notifyDelegateAboutAnimationDone];
    你应该设置你的 ViewController 类来确认协议(protocol) BottomViewDelegate

    在 MyViewController.h
      @interface MyViewController : UIViewController <BottomViewDelegate>
    ...
    @end
    

    和 f.e.在 viewDidLoad 你应该设置 bottomView.delegate = self;

    10-06 09:39