我编写了第三方框架,在调用应用程序的现有视图之上显示UIView,即应用程序调用框架/ SDK,SDK在当前屏幕上的视图顶部显示UIView
这是通过使用代表来完成的。该应用程序将屏幕上的当前视图设置为框架的委托。然后,框架使用此委托,并使用代码将其自己的UIView添加为子视图:
[[self delegate] addSubview:myVc.view];
其中myVc
是框架中的ViewController。
现在我需要将一个方法传回给调用应用程序,说明视图已显示在屏幕上。因为委托是UIView,我如何将消息传递给调用类?
我之所以要求UIView委托是因为我的UIView只占用屏幕的一部分,我需要屏幕的其他部分来显示应用程序的剩余部分并激活。当我使用ViewController作为委托时,它导致屏幕的其他部分变黑而不是透明。
所以我的问题是如何将消息传递给调用应用程序,该应用程序调用SDK并将其视图设置为委托。感谢
答案 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")