在 UIViewController 之外设置委托?

Posted

技术标签:

【中文标题】在 UIViewController 之外设置委托?【英文标题】:Setting Delegate Outside UIViewController? 【发布时间】:2012-04-23 22:14:23 【问题描述】:

我正在尝试尽可能地将 iAd 初始化代码与主 UIViewController 隔离开来,以便将来轻松集成我的应用程序。我创建了 AdManager (NSObject) 类来处理 iAd 设置和初始化。但是,我不知道如何为实现这些委托类的 UIViewController 之外的对象设置委托。例如:

@interface AppViewController : UIViewController<ADBannerViewDelegate>

我的 AdManager 会有这样的东西:

+(void)initAdBannersInView:(UIView*)view andViewController:(UIViewController*)vc
  ADBannerView *iAdBannerView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, -bannerSize.height, bannerSize.width, bannerSize.height)];
  iAdBannerView.delegate = vc;  
  [view addSubview:iAdBannerView];

错误(警告)消息是:从不兼容的类型“UIViewController”分配给“id”

我可能对代表的这种特殊情况不是很好,所以请原谅我可能的误解,但是有可能以类似的方式实现我所需要的吗?怎么样?

【问题讨论】:

【参考方案1】:

您将vc 参数定义为UIViewController *。这意味着您可以在其中传递任何旧视图控制器,不一定是符合ADBannerViewDelegate 协议的视图控制器。您应该定义 vc 参数,以便您只能在以下位置传递符合该协议的视图控制器:

+(void)initAdBannersInView:(UIView*)view andViewController:(UIViewController<ADBannerViewDelegate>*)vc

【讨论】:

以上是关于在 UIViewController 之外设置委托?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIViewController 设置为 UITableViewCell 中自定义 UIView 的委托

链接 uiviewcontroller 委托

如何在视图控制器之外设置数据源和委托

设置委托对象中的委托方法没有响应

将委托设置为对象

UIView 需要推送一个 UIViewController(委托)