UITableViewCell for MoPub Native Ad的问题

时间:2015-07-14 19:14:44

标签: ios swift uitableview mopub

我为我的iOS应用集成了MoPub广告,在我的UITableViewController中运行一些原生广告(实际上,它是PFQueryTableViewController,因为我使用Parse将数据加载到tableView中)。

一切运行正常 - 控制台显示广告正在成功加载,我可以在我的tableView中看到额外的单元格广告应该在哪里 - 问题是广告的所有内容都没有显示出来;我只看到一个空白单元格。

问题似乎不是来自MoPub。我想我的电池设置不正确,因为我无法在那里看到任何东西。

我尝试了两件事。

  1. 使用故事板设置单元格。我在我的UITableViewController中添加了一个新单元格,并为它创建了一个新类NativeAdCell。我设计了IBOutlets并将它们连接到类文件。 内容通过MoPub函数加载,如下所示:

    func layoutAdAssets(adObject: MPNativeAd!) {
    adObject.loadIconIntoImageView(iconImageView)
    adObject.loadTitleIntoLabel(titleLabel)
    adObject.loadCallToActionTextIntoButton(callToActionButton)
    adObject.loadImageIntoImageView(mainImageView)
    adObject.loadTextIntoLabel(mainTextLabel)
    }
    
  2. 应用程序在控制台输出(lldb)的第一行崩溃。

    1. 以编程方式添加插座。在NativeAdCell文件中,我添加了这样的插座:

      var mainTextLabel = UILabel()
      var titleLabel = UILabel()
      var iconImageView = UIImageView()
      var mainImageView = UIImageView()
      var callToActionButton = UIButton()
      
    2. 然后设置他们的帧。 内容加载相同的MoPub函数。现在没有崩溃,但广告单元显示完全空白,没有内容。即使我手动设置mainTextLabel.text = "Please show up",也不会显示任何内容。

      当我尝试加载IBOutlets时崩溃让我觉得我将NativeAdCell链接到tableView的方式有问题,但似乎MoPub SDK应该处理这个问题。

      有人可以根据这些信息发现问题吗?

2 个答案:

答案 0 :(得分:1)

我在没有IBOutlets的情况下实现了这个目标,但没有详细记录,所以我认为这可能会帮助那些希望将MoPub SDK与自定义单元格用于原生广告的人

//
//  AdTableViewCell.swift
//  Trending-News
//
//  Created by Conor Griffin on 22/07/2015.
//  Copyright (c) 2015 Conor Griffin. All rights reserved.
//

import UIKit
import MoPub

class AdTableViewCell: UITableViewCell, MPNativeAdRendering {

    var iconImageView: UIImageView! = UIImageView()
    var titleLabel: UILabel! = UILabel()
    var mainTextLabel: UILabel! = UILabel()
    var advertIndicator: CGSponsoredLinkLabel! = CGSponsoredLinkLabel()
    var adCorner: CGCornerHighlight! = CGCornerHighlight()

    static func sizeWithMaximumWidth(maximumWidth: CGFloat) -> CGSize {
        return CGSize(width: maximumWidth, height: 100)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        let width = CGRectGetWidth(frame)
        let cellFrame = CGRect(x: 0, y: 0, width: width, height: 100)

        iconImageView.layer.borderColor = UIColor.grayColor().CGColor
        iconImageView.layer.borderWidth = 1
        iconImageView.frame = CGRectMake(10, 10, 80, 80)
        contentView.addSubview(iconImageView)

        titleLabel.frame = CGRectMake(100, 10, self.frame.width - 110, 25)
        contentView.addSubview(titleLabel)

        mainTextLabel.frame = CGRectMake(100, 35, self.frame.width - 110, self.frame.height - 65)
        contentView.addSubview(mainTextLabel)
        mainTextLabel.numberOfLines = 3
        mainTextLabel.font = UIFont.systemFontOfSize(11.0)

        advertIndicator.frame = CGRectMake(100, self.frame.height - 30, self.frame.width - 110, self.frame.height - 80)
        contentView.addSubview(advertIndicator)
        advertIndicator.font = UIFont.systemFontOfSize(10.0)
        advertIndicator.text = "Advertisement"
        advertIndicator.textColor = UIColor.darkGrayColor()
        advertIndicator.backgroundColor = UIColor(red: 252/255.0, green: 246/255.0, blue: 220/255.0, alpha: 1.0)
        advertIndicator.clipsToBounds = true
        advertIndicator.layer.masksToBounds = true
        advertIndicator.layer.cornerRadius = 3

    }

    func layoutAdAssets(adObject: MPNativeAd!) {
        adObject.loadTitleIntoLabel(titleLabel)
        adObject.loadTextIntoLabel(mainTextLabel)
        adObject.loadIconIntoImageView(iconImageView)
    }

}

答案 1 :(得分:0)

真的,我忘了将子视图添加到NativeAdCell的contentView中,这真是太神奇了。 self.contentView.addSubview(mainTextLabel)等解决了#2。

还不确定如何让它与IBOutlets一起使用。这样会更容易(不需要编程约束)。