2016-05-10 2 views
2

Я включил стандартный баннер AdMob в статическую ячейку tableview (tableview: 1 секция, 5 строк).Показывать/скрывать статическую панель TableView, если BannerView загружает/не загружает

Я хотел бы автоматически скрыть или показать соответствующую ячейку таблицы (содержащую баннерную панель AdMob) в зависимости от того, загружен ли баннер или нет.

Мой код баннера интеграции AdMob:

import UIKit 
import GoogleMobileAds 

class WorkoutsFreeListTVC: UITableViewController, GADBannerViewDelegate { 

@IBOutlet weak var bannerView: GADBannerView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    bannerView.hidden = true 
    bannerView.adUnitID = "ca-app-pub-9451126739340372/2084650447" 
    bannerView.rootViewController = self 
    bannerView.delegate = self 

    let request = GADRequest() 
    request.testDevices = ["dcf33ab873fb56fdf5ff94bd7a5f3fde"] 

    bannerView.loadRequest(GADRequest()) 
} 

Функции, чтобы проверить, если баннер нагрузок или иначе:

func adViewDidReceiveAd(bannerView: GADBannerView!) { 
    bannerView.hidden = false 
} 

func adView(bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) { 
    bannerView.hidden = true 
} 

Мои bannerView всегда будут представлены (если они доступны для загрузки) в то же самое tableview cell (строка index 3).

Я имею в виду вдоль линий этого кода, чтобы достичь моего желаемого результата:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
if indexPath.row == 3 && !myImageIsLoaded { 
    return 0 
} 
// Will hide just the fourth row of my table if myImageIsLoaded is false 

return 50 

}

, который я получил от аналогичного вопроса в котором высота ячейки была возвращена в ноль (0) и эффективно «скрыто», если !myImageIsLoaded.

Я пытался изменить код в соответствии с моими потребностями, но застрял.

Вопросы: Я нахожусь на правильном пути? Так я должен подойти к проблеме? Как я могу изменить код на свои нужды?

Спасибо за ваше время;)

ответ

1

Кэтрин Дженкинс,

Да подход вы следуете абсолютно нормально.

В вашем случае, возможно, все, что вы хотите проверить, это баннер, который скрыт или нет. Если скрыто, то установите высоту строки на 0, иначе верните высоту ячейки правильно.

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.row == 3 { 
     if bannerView.hidden 
      return 0 
     else 
      return 50 //value of height for banner cell 
    } 
    else { 
     return 50 //return other cell height 
    } 
} 

и для того, чтобы отразить изменения в высоту ячейки вы можете сделать

func adViewDidReceiveAd(bannerView: GADBannerView!) { 
    bannerView.hidden = false 
    self.tableView.reloadData() 
} 

func adView(bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) { 
    bannerView.hidden = true 
    self.tableView.reloadData() 
} 
+0

Спасибо SANDEEP. Спасибо, что заполнили пробелы для меня. Будет также включать 'self.tableView.reloadData()', как вы посоветовали. Brilliant! Приятного да! –

Смежные вопросы