如果Struct项目等于零

时间:2017-01-28 06:46:25

标签: swift uitableview struct admob

我有一个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
    }


}

1 个答案:

答案 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
    }

}