2012-03-25 18 views
7

अंदर मैं एक ब्लॉग साइट के लिए एक ऐप का निर्माण कर रहा हूँ।iAd UITableViewController नीचे UINavigationController

मैं के रूप में यह जड़ दृश्य है एक UITableViewController के साथ एक UINavigationController है।

मैं इस एक स्टोरीबोर्ड कोई समस्या नहीं में बाहर रखी है, लेकिन मैं स्क्रीन के नीचे और xcode के लिए एक iAd दृश्य खींचें करने के लिए मुझे इसे जोड़ने नहीं दूँगी कोशिश कर रहा हूँ।

ऐसा लगता है कि मुझे UIViewCiewController के उप-वर्ग से UIViewController के उप-वर्ग में स्विच करना है, और बस मेरे उप-वर्गीकृत UIViewController में मेरे प्रतिनिधि और डेटास्रोत विधियों को डालना है।

यह मेरे लिए गलत लगता है। मैं तो बस लेख सुर्खियों का UITableView के साथ समाप्त करने के लिए, एक नेविगेशन बार ऊपर शीर्ष के साथ एक iAd तल पर कोशिश कर रहा हूँ, और ...

सलाह? सुझाव?

अग्रिम धन्यवाद।

उत्तर

23

सबसे आसान तरीकों में यह पूरा करने से एक UITableView के tableFooterView संपत्ति का उपयोग कर रहा है। हां, मुझे पता है कि पाद लेख तालिका के नीचे रहता है, लेकिन इसे नहीं करना है। आप टेबल के भीतर अपना फ्रेम सेट कर सकते हैं। तब

self.tableView.tableFooterView = iAd; 

, टेबल स्क्रॉल iAd के फ्रेम को समायोजित करने, UIScrollView प्रतिनिधि विधि को लागू: तो जैसे पाद लेख के रूप में iAd जोड़ें (यह संभव है क्योंकि 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 का उपयोग करते हैं।

+1

यह काम किया धन्यवाद। रिकॉर्ड के लिए, हालांकि, मैं बस एक व्यू कंट्रोलर और टेबलव्यू कंट्रोलर का उपयोग करने के बजाय एक टेबल व्यू का उपयोग कर समाप्त हुआ, इसलिए मुझे तालिका को आकार देने और नीचे iAd रखने में कोई समस्या नहीं थी। – overeasy

+0

मुझे नहीं पता कि यह कोड मेरे आवेदन में कैसे काम करेगा। मैंने अपने टेबल व्यू के टेबल व्यू फ़ूटर में बैनर व्यू खींच लिया है, लेकिन मुझे यकीन नहीं है कि वहां से कहां जाना है .. यह चर 'iAd' कहां दिया जा रहा है? –

+0

मैं देखता हूं, मैंने अभी एक नया 'AdBannerView' प्रोग्रामेटिक रूप से प्रारंभ किया है। –

2

मैंने तालिका फूटर व्यू की स्थिति समायोजित करने के साथ उपरोक्त उदाहरण का उपयोग करने की कोशिश की, लेकिन मुझे पता चला कि डेटा को फिर से लोड करने या तालिका को रीफ्रेश करते समय इसे प्रबंधित करना मुश्किल था।

तब मुझे पता चला कि यह तालिका ViewController के दृश्य पर्यवेक्षण पर iAd बैनर जोड़कर किया जा सकता है।

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]; 

जब बैनर भरी हुई है मैं, मैं समाधान NJones द्वारा पोस्ट किए गए कुछ परिवर्तन करना पड़ा tableViewController

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

में अंतिम सेल के लिए जगह बनाने के लिए एक tableFooterView बनाने के बाद से वहाँ एक था विज्ञापन के साथ समस्या अन्य सभी कोशिकाओं/विचारों के शीर्ष पर प्रदर्शित नहीं की जा रही है।

@interface MyTableViewController() <ADBannerViewDelegate> 

tableviewcontroller को AdBanner जोड़ना::

सबसे पहले सुनिश्चित करें कि आपके tableViewController एक AdBannerViewDelegate है

- (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]; 
    } 
} 

थी रों समारोह कहा जाता हो जाता है जब भी दृश्य अपने subviews लेआउट करने के लिए (ताकि आप केवल इसे यहाँ की जरूरत है, कोई जरूरत नहीं, स्क्रॉल के लिए जाँच करने के लिए आदि) जा रहा है:

-(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; 
}