2012-03-25 28 views
7

我正在爲博客網站構建一個應用程序。iAd在UINavigationController中的UITableViewController下面

我有一個UINavigationController與UITableViewController,因爲它是根視圖。

我把這個放在故事板沒有問題,但我試圖拖動一個iAd視圖到屏幕底部,xcode不會讓我添加它。

它看起來像我不得不從UITableViewController的子類切換到UIViewController的子類,只是把我的委託和數據源方法放在我的子類UIViewController中。

這對我來說似乎是錯誤的。我只是試圖結束與文章標題的UITableView,與導航欄頂部,並在底部iAd ...

建議?建議?

在此先感謝。

回答

23

最簡單的方法之一就是使用UITableViewtableFooterView屬性。是的,我知道頁腳停留在桌子的底部,但不一定。您可以在表格中設置其框架。添加在IAD作爲像這樣頁腳:

self.tableView.tableFooterView = iAd; 

然後,以調整IAD的幀作爲表滾動時,實現UIScrollView委託方法:(這是可能的,因爲UITableViewUIScrollView子類)

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGRect iAdFrame = iAd.frame; 
    CGFloat newOriginY = table.contentOffset.y + table.frame.size.height - iAdFrame.size.height; 
    CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height); 
    iAd.frame = newIAdFrame; 
} 

你可以看到實現很簡單。我們只需使用contentOffsety來確定iAd的框架應有多遠。

+1

這工作表示感謝。對於記錄,然而,我最終只是使用viewController和tableView而不是使用tableViewController,所以我沒有任何問題調整tableView並放置下面的iAd。 – overeasy 2012-04-04 23:52:26

+0

我不知道如何讓這段代碼在我的應用程序中工作。我已經在我的表視圖的表視圖頁腳拖動了橫幅視圖,但我不知道從那裏去哪裏..這個變量'iAd'在哪裏被分配? – 2013-06-17 06:44:25

+0

我看到了,我剛剛以編程方式初始化了一個新的「AdBannerView」。 – 2013-06-17 06:48:35

2

我試着用NJones調用tableFooterView的位置來使用上面的例子,但是我發現在重新加載數據或刷新表格時很難管理它。

然後我發現這可以通過將iAd橫幅添加到tableViewController視圖的超級視圖來完成。

self.bannerViewController = [[BannerViewController alloc] init]; 
[self.bannerViewController.view setHidden:YES]; 
[self.bannerViewController.view setFrame:CGRectMake(0, self.view.superview.frame.size.height - self.tabBarController.tabBar.frame.size.height - 50, 320, 50)]; 

[self.view.superview addSubview:self.bannerViewController.view]; 
[self.bannerViewController loadBanner]; 

當旗幟加載我創建了一個tableFooterView,使空間在tableViewController

-(void)bannerDidLoad{ 
    [self.bannerViewController.view setHidden:NO]; 
    self.tableView.tableFooterView = [[UIView alloc]; 
    initWithFrame:self.bannerViewController.view.frame]; 
} 
0

最後一個單元格,我不得不做一些改動張貼NJones的解決方案,因爲有一個廣告未顯示在所有其他單元格/視圖之上的問題。

首先確保你的tableViewController是AdBannerViewDelegate:

@interface MyTableViewController() <ADBannerViewDelegate> 

添加AdBanner到tableviewcontroller:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    ADBannerView *adBanner = [[ADBannerView alloc]initWithAdType:ADAdTypeBanner]; 
    adBanner.delegate = self; 
    self.tableView.tableFooterView = adBanner; 
} 

來定位廣告橫幅從NJones採取的代碼,我只加了最後一行將廣告橫幅帶到前面:

-(void)positionAdBanner { 
    ADBannerView *adBanner = (ADBannerView *) self.tableView.tableFooterView; 
    if (adBanner) { 
     CGRect iAdFrame = adBanner.frame; 
     CGFloat newOriginY = self.tableView.contentOffset.y + self.tableView.frame.size.height - iAdFrame.size.height; 
     CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height); 
     adBanner.frame = newIAdFrame; 
     [self.tableView bringSubviewToFront:adBanner]; 
    } 
} 

Thi S功能被稱爲每當觀點是要佈局其子視圖(所以你只需要在這裏,不需要檢查滾動等):

-(void)viewWillLayoutSubviews{ 
    [super viewWillLayoutSubviews]; 
    [self positionAdBanner]; 
} 

你也應該處理ADBannerViewDelegate方法:

-(void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    banner.hidden = NO; 
    [self positionAdBanner]; 
} 
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    banner.hidden = YES; 
} 
相關問題