如何符合UITabBarControllerDelegate

时间:2010-02-06 20:34:47

标签: iphone objective-c cocoa-touch uitabbarcontroller

我有一个基于tabbar的应用程序,并执行以下操作以获取对应用程序委托的引用:

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

然后发出此警告:

warning: type 'id <UIApplicationDelegate>' does not conform to the 'UITabBarControllerDelegate' 

我的应用程序委托标题如下所示:

#import <UIKit/UIKit.h>

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>     {
UIWindow *window;
UITabBarController *tabBarController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

.m文件中唯一的方法是applicationDidFinishLaunching和dealloc。我还需要遵守协议吗?

4 个答案:

答案 0 :(得分:14)

这是一个静态警告。这意味着[[UIApplication sharedApplication] delegate]的返回类型不符合标签栏委托协议,这是真的。

投射从[[UIApplication sharedApplication] delegate]返回的值以消除警告:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];

答案 1 :(得分:2)

如果使用<UITabBarDelegate>将MyAppDelegate声明为符合UITabBarDelegate,则需要至少实现协议所需的方法。

您应该了解协议如何工作,以及正式和非正式协议之间的差异。

您需要实现以符合UITabBarDelegate的方法是

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

答案 2 :(得分:1)

我想插话,因为第二和第三条评论在技术上是不正确的。该错误表明AppDelegate不符合UITabBarController委托。关于提到UITabBarDelegate的答案。

苹果和橘子。

顺便提一下,Apple示例代码也使用了转换方法。

答案 3 :(得分:0)

“顺便提一下,Apple示例代码也使用了强制转换方法。” - 杰夫 我认为这不是偶然的。 错误来了,因为委托属性是id“UIApplicationDelegate”,但是因为他将它分配给MyAppDelegate而获得警告,这不仅符合UIApplicationDelegate而且符合UITabBarControllerDelegate。这就是为什么,如果一个人介绍演员 MyAppDelegate appDelegate =(MyAppDelegate )[[UIApplication sharedApplication] delegate]; 它运作正常。

相关问题