在 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 之外设置委托?的主要内容,如果未能解决你的问题,请参考以下文章