消息传递与UIView作为委托

时间:2013-10-21 20:00:11

标签: iphone ios objective-c xcode uiview

我编写了第三方框架,在调用应用程序的现有视图之上显示UIView,即应用程序调用框架/ SDK,SDK在当前屏幕上的视图顶部显示UIView

这是通过使用代表来完成的。该应用程序将屏幕上的当前视图设置为框架的委托。然后,框架使用此委托,并使用代码将其自己的UIView添加为子视图:

[[self delegate] addSubview:myVc.view];

其中myVc是框架中的ViewController。

现在我需要将一个方法传回给调用应用程序,说明视图已显示在屏幕上。因为委托是UIView,我如何将消息传递给调用类?

我之所以要求UIView委托是因为我的UIView只占用屏幕的一部分,我需要屏幕的其他部分来显示应用程序的剩余部分并激活。当我使用ViewController作为委托时,它导致屏幕的其他部分变黑而不是透明。

所以我的问题是如何将消息传递给调用应用程序,该应用程序调用SDK并将其视图设置为委托。感谢

2 个答案:

答案 0 :(得分:0)

您可以发布调用者侦听的通知,或者您可以接受来自调用者的块作为参数,并在显示视图时执行该操作。

答案 1 :(得分:0)

如果我理解你的问题,那么你只需要定义协议:

·H

@protocol YourFrameWorkViewDelegate <NSObject>
     - (void)yourFrameWorkViewDidAppear;
@end

@interface YouFrameWorkView : UIView
@property (weak, nonatomic) id <YourFrameWorkViewDelegate> delegate;
@end

的.m

@implementation YouFrameWorkView
- (void)didMoveToWindow
{
   if ([self.delegate respondsToSelector:@selector(yourFrameWorkViewDidAppear)]) {
    [self.delegate yourFrameWorkViewDidAppear];
   }
}
@end

或者您可以通过VC调用代理

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if ([self.view.delegate respondsToSelector:@selector(yourFrameWorkViewDidAppear)]) {
    [self.view.delegate yourFrameWorkViewDidAppear];
}

当然,任何想要使用框架工作的应用程序都需要实现该协议。这可能是rootVCs视图必须是子类并实现您的协议。这是标准做法。希望它有所帮助。

评论后跟进:

认为该视图实现了您的协议​​

·H

@interface ViewThatUsesYourFrameWork : UIView <YourFrameWorkViewDelegate>

@end

的.m

@implementation ViewThatUsesYourFrameWork

- (void)yourFrameWorkViewDidAppear
{

}
@end

并确认委托确实已设置。 在你调用respondsToSelector之前

if(!self.delegate)NSLog(@"Delegate is not set")