我有一个tableView,我试图每隔一定次数填充广告。我正在使用结构来存储我的变量。
struct postStruct
{
var image : UIImage?
var label : String?
var captions : String?
var ad: GADNativeExpressAdView?
}
然后我在某些地方追加某些东西。我的tableview中的if语句出现问题,如果变量不等于nil,我想加载广告。这是我当前的代码,它使用else语句中的常规单元格填充整个tableview。我怀疑它可能与indexPath有关,但我已经尝试了所有给定的。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
if arrayOfPosts[indexPath.row].ad != nil{
let adView = arrayOfPosts[indexPath.row].ad
let reusableAdCell = tableViewOne.dequeueReusableCellWithIdentifier("NativeExpressAd", forIndexPath: indexPath) as! NativeExpressAd
for subView in reusableAdCell.contentView.subviews {
subView.removeFromSuperview()
}
reusableAdCell.addSubview(adView!)
adView?.center = reusableAdCell.contentView.center
return reusableAdCell
}
else{
let cell = tableViewOne.dequeueReusableCellWithIdentifier("popularCell", forIndexPath: indexPath) as! PopTableViewCell
return cell
}
}
以下是我填充arrayOfPosts的两次
func getData()
{
arrayOfPosts = [
postStruct.init(image: UIImage(named: "profileIcon-1") , label: "Test 1", captions: "Test 1", ad: nil),
postStruct.init(image: UIImage(named: "profileICONTRY3-1") , label: "Test 2", captions: "Test 2", ad: nil),
postStruct.init(image: UIImage(named: "self") , label: "Test 3", captions: "Test 3", ad: nil),
postStruct.init(image: UIImage(named: "profileIcon-1") , label: "Test 4", captions: "Test 4", ad: nil), postStruct.init(image: UIImage(named: "profileICONTRY3-1") , label: "Test 5", captions: "Test 5", ad: nil),
postStruct.init(image: UIImage(named: "self") , label: "Test 6", captions: "Test 6", ad: nil)
]
}
这是我获得广告的地方
func NativeAdsExpress
{
var index = 2
let size = GADAdSizeFromCGSize(CGSize(width: adWidth, height: adHeight))
while index < arrayOfPosts.count
{
let adView = GADNativeExpressAdView(adSize: size)
adView?.adUnitID = "ca-app-pub-6067365138487039/8892521700"
adView?.rootViewController = self
adView?.delegate = self
let new = postStruct(image: nil, label: nil, captions: nil, ad: adView)
adToLoad.append(adView!)
arrayOfPosts.insert(new, atIndex: index)
tableViewOne.reloadData()
index += adInterval
}
}
答案 0 :(得分:1)
我们假设arrayOfPosts具有与单元格一样多的元素。否则,您可能在数组之外或其他任何位置有错误索引。 如果您有要投放广告的单元格,则只应将值分配给单元格广告。我不明白为什么你把重载表放在单元格内。如果你在这个方法是因为表正在重新加载。 NativeExpressAd单元格应该具有GADNativeExpressAdView类型内的视图或类型UIView(取决于GADNativeExpressAdView显示信息的内容),例如adView,您应该只为该视图分配结构的内容,或多或少像这样: / p>
reusableAdCell.adView = arrayOfPosts[indexPath.row].ad
return reusableAdCell
您可以显示NativeExpressAd单元格的代码
<强>更新强>
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
if arrayOfPosts[indexPath.row].ad != nil{
let adView = arrayOfPosts[indexPath.row].ad
let reusableAdCell = tableViewOne.dequeueReusableCellWithIdentifier("NativeExpressAd", forIndexPath: indexPath) as! NativeExpressAd
reusableAdCell.adView = adView
return reusableAdCell
} else{
let cell = tableViewOne.dequeueReusableCellWithIdentifier("popularCell", forIndexPath: indexPath) as! PopTableViewCell
// put values of cell, label, caption, etc
return cell
}
}