我想在我的应用中添加广告,例如Native Ads或Parallax。
App主要是一个UICollectionView,其中有许多单元格显示不同的信息。
我正在使用SDK来加载广告对象。
我创建了一个自定义UICollectionViewCell类,以便在我的UICollectionView中初始化单元格并将Native Ad加载为单元格。
@objc class AdsCollectionViewCell: BaseCollectionViewCell, AdapterAdsDelegate {
@IBOutlet var outletNativeTitle: UILabel!
@IBOutlet var outletImageNative: UIImageView!
@IBOutlet var outletButtonAction: UIButton!
@IBOutlet var clickableView: UIView!
@IBOutlet var mediaContainer: UIView!
@IBOutlet var bottomView: UIView!
var adFactory = AdsSDKFactory()
var adObject = AdsObject()
@objc func initCell(viewController: HomeViewController) {
DispatchQueue.main.async {
self.isHidden = true
}
// Set some properties for the Ads SDK
adFactory.nativeDelegate = self
adObject.viewController = viewController
adFactory.placementId = "154569"
// method from the SDK to request the Ad
adFactory.loadAds()
}
它正在运行,但我的主要问题是我正在显示一个空单元格,当我从带有广告对象的Ad SDK获得委托响应方法时,会显示内容。
这是我在AdsCollectionViewCell中收到的委托方法。
func adObjectDidLoad(adView: AdsObject!) {
self.adObject = adView
self.updateCellOutlets() // my method to update labels from the adView
self.setNeedsDisplay()
self.delegate.tileCellDidSucceed!(self)
}
我想首先在我的HomeViewController中初始化并调用adFactory.loadAds
,这样当我收到委托响应和adObject时,我不会直接updateCellOutlets
但是我可以self.delegate.tileCellDidSucceed!(self)
来自BaseCollectionViewCell
的委托,以便通知我的HomeViewController该单元格已准备就绪。
如何在cellForRow
方法之外初始化单元格,以便在广告加载时动态插入?
编辑:我已按照这些建议创建了Singleton AdsLoader类,该类设置了请求广告的所有参数,并且还发出了加载请求。 我将HomeViewController设置为委托,以便我可以直接在HomeViewController中将视图广告作为响应。
我现在的问题是在右侧indexPath的collectionView中插入object。我应该插入哪个对象?
答案 0 :(得分:1)
我无法清楚了解AdSDK的代码和具体要求。因此,根据我对需要完成的工作的理解,我将继续写一个伪代码。这是我的目的,而不是将adFactory.loadAds()
调用到UICollectionViewCell
对象中,您可以将此任务执行到另一个类对象中。我们说AdLoader
所以你的添加加载器应该是这样的。
class Adloader {
var adFactory = AdsSDKFactory()
typealias adLoadCompletionHandler = (adView: AdsObject) -> Void
var loadCompletion
func initLoader() {
//Set some properties for the Ads SDK
adFactory.nativeDelegate = self
// method from the SDK to request the Ad
adFactory.loadAds()
}
}
加载广告后,您可以使用完成处理程序来更新集合视图。
func adObjectDidLoad(adView: AdsObject!) {
adLoadCompletionHandler(adView)
}
所以你的代码可以是这样的。
if (needToInsertAd) {
var newAd = Adloader.initLoader()
newAd.adLoadCompletionHandler {
//Code to insert cell at indexpath
}
}
希望这会对你有所帮助。