1

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

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

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

myVc框架中的 ViewController 在哪里。

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

我要求 UIView 委托的原因是因为我的 UIView 只占用屏幕的一部分,而我需要屏幕的另一部分来显示应用程序的剩余部分并处于活动状态。当我使用 ViewController 作为代理时,它导致屏幕的另一部分是黑色的而不是透明的。

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

4

2 回答 2

0

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

于 2013-10-21T20:07:17.337 回答
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")
于 2013-10-21T21:29:48.887 回答