ing*_*por 2 iphone xcode delegates objective-c uitabbarcontroller
这就是我告诉didFinishLaunchingWithOptions有关在故事板中创建的标签栏控制器的方法.它现在在主选项卡中显示iAd横幅.但是当我点击其他标签时没有任何反应.永远不会调用didSelectViewController.如何将didSelectViewController连接到我的TabBarController并将currentController属性分配给当前/活动选项卡?
#import "AppDelegate.h"
@interface AppDelegate()
@property (nonatomic, retain) ADBannerView *bannerView;
@property (nonatomic, assign) UIViewController<BannerViewContainer> *currentController;
@end
@implementation AppDelegate
@synthesize window = _window;
@synthesize bannerView;
@synthesize currentController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch
CGRect screenBounds = [[UIScreen mainScreen] bounds];
// bannerView was here
// This is the reference to the tab bar controller and first tab from storyboard.
UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
self.currentController = [[tabController viewControllers] objectAtIndex:0];
NSLog(@"Root: %@", self.window.rootViewController);
NSLog(@"Tab with banner: %@", self.currentController);
return YES;
}
//and this isn't called:
- (void)tabController:(UITabBarController *)tabController didSelectViewController:
(UIViewController *)viewController
{
// If called for selection of the same tab, do nothing
if (currentController == viewController) {
return;
}
if (bannerView.bannerLoaded) {
// If we have a bannerView atm, tell old view controller to hide and new to show.
[currentController hideBannerView:bannerView];
[(UIViewController<BannerViewContainer>*)viewController showBannerView:bannerView];
}
// And remember this viewcontroller for the future.
self.currentController = (UIViewController<BannerViewContainer> *)viewController;
}
Run Code Online (Sandbox Code Playgroud)
如上所述,您需要设置UITabBarController- 添加第三行的代理,如下所示:
// This is the reference to the tab bar controller and first tab from storyboard.
UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
tabController.delegate = self;
Run Code Online (Sandbox Code Playgroud)
你通过这样做做了什么:@interface AppDelegate : UIResponder <UIApplicationDelegate, ADBannerViewDelegate, UITabBarControllerDelegate>说,"我的类AppDelegate符合UITabBarControllerDelegate的协议".但是,标签栏控制器实例还不知道您的类.因此,您必须告诉标签栏控制器哪个AppDelegate实例是您希望它回拨的实例.您可以通过设置delegate属性来完成此操作.
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
3114 次 |
| 最近记录: |