xcode tabBar didSelectItem似乎无法正常工作

6ovsh4lw  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(120)

在我的头文件中,我有这样的内容:

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarDelegate, UITabBarControllerDelegate>{

    IBOutlet UITabBarController *tabBarController;

}

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

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

@end

在我的主文件中,我有以下内容:

@synthesize tabBarController;

-(void)viewDidLoad{
    [super viewDidLoad];
    self.tabBarController.delegate = self;
    self.view = tabBarController.view;
}

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    NSLog(@"rawr"); 
}

- (void)viewDidUnload {
    [super viewDidUnload];
}

- (void)dealloc {
    [tabBarController release];
    [super dealloc];
}

@end

我已经将我的tabbarcontroller作为一个委托连接到接口构建器中我的文件的所有者,但是它仍然没有调用didSelectItem方法。
有什么我遗漏的吗?
我已经添加了tabBarController.delegate = self;,它仍然不工作。

xj3cbfub

xj3cbfub1#

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

此方法是UITabBar的委托方法,而不是UITabBarController的委托方法,因此

self.tabBarController.delegate = self;

将不起作用。
选项卡栏控制器有自己的UITabBar,但不允许更改由选项卡栏控制器管理的选项卡栏的委托,因此只需尝试UITabBarControllerDelegate方法,如下所示:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
pgpifvop

pgpifvop2#

您需要添加以下内容:

tabbarcontroller.delegate = self;
ha5z0ras

ha5z0ras3#

使用UITabBarControllerDelegate代替UITabBarDelegate,并
-tabBarController:didSelectViewController{}而不是tabBar:didSelectItem{}
接口

@interface TabBarController : UIViewController <UIApplicationDelegate, UITabBarControllerDelegate, UITabBarControllerDelegate>{

    IBOutlet UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end

主档桉

@implementation TabBarController
    @synthesize tabBarController;

    /*other stuff*/
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
        NSLog(@"rawr"); 
    }
    /*other stuff*/
@end
x7rlezfr

x7rlezfr4#

你可以通过设置self.tabBarController.delegate = self;或者使用Interface builder对tabbarcontroller对象(而不是bar)进行设置,查看连接检查器并将连接拖到文件的所有者上。

ltqd579y

ltqd579y5#

您已经合成了标签栏,因此现在需要编写:self.tabBarController.delegate = self;

mzsu5hc0

mzsu5hc06#

如上所述,有很多原因导致它不能工作。下面是一个更微妙的原因。如果你是通过编程方式创建UI(没有故事板或Xib),你需要设置UIWindow的屏幕。

self.window = [[UIWindow alloc] init];
self.window.screen = [UIScreen mainScreen];  // <- The UITabViewController will not
                                             //    accept taps without this.

如果你使用的是Xib,我相信这相当于选择了“启动时全屏”。必须选中它,否则我会发现我的选项卡不起作用。
我有一个不工作的标签控制器,这是我必须做的,让它工作。没有其他答案在这个页面上帮助我。我想使用xib/故事板是相当罕见的这些天(我认为这是从iOS 5天),但离开这里的人,这样做,并陷入这种情况。

相关问题