TabBarController didSelectViewController 不工作

Posted

技术标签:

【中文标题】TabBarController didSelectViewController 不工作【英文标题】:TabBarController didSelectViewController not working 【发布时间】:2012-12-04 16:18:33 【问题描述】:

我知道这是一个非常重复的话题,但我无法让它发挥作用。

MainTab.h:

#import <UIKit/UIKit.h>

@interface MainTab : UITabBarController<UITabBarControllerDelegate, UITabBarDelegate> 

     IBOutlet UITabBarController *tabController;



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

@end

MainTab.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    NSLog(@"main tab"); 
    [super viewDidLoad];

    self.tabBarController.delegate = (id)self;
    [self setDelegate:self];

    // Do any additional setup after loading the view.


- (void)viewDidUnload

    [super viewDidUnload];
    // Release any retained subviews of the main view.



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


    NSLog(@"selected %d",tabBarController.selectedIndex);


我找不到我缺少的东西,我们将不胜感激。

现在我尝试将它链接到 MainStoryBoard:

但是不行,是什么关系?

【问题讨论】:

如何创建MainTab对象?? @Rob 是的,你是对的 - 我不知何故错过了问题的“控制器”部分,认为它是一个带有标签栏组件的自定义控制器。我删除了我的评论,并为您的详细回答投票。 【参考方案1】:

根据您的@interface(以及您随后的屏幕快照),MainTabUITabBarController,因此以下行:

self.tabBarController.delegate = (id)self;

应该是:

self.delegate = self;

您不希望 tabBarController 本身具有 tabBarController 属性,也不想使用 self.tabBarController 语法。如果您尝试从其子控制器之一引用选项卡栏控制器,则仅使用该语法。在标签栏控制器本身时,只需参考self


因此,如果 MainBar 定义为:

//  MainBar.h

#import <UIKit/UIKit.h>

@interface MainBar : UITabBarController

@end

//  MainBar.m

#import "MainBar.h"

@interface MainBar () <UITabBarControllerDelegate>

@end

@implementation MainBar

- (void)viewDidLoad

    [super viewDidLoad];

    self.delegate = self;


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

    NSLog(@"selected %d",tabBarController.selectedIndex);


@end

并且不要忘记设置标签栏控制器的类:

连接检查器(我没有触摸任何东西)看起来像:

【讨论】:

不,我不能!当我尝试控制+拖动时,我移动 TabItems MainTab 设置正确,我有一个 NSLog 来检查它,用你的代码解决了 优秀的答案。关键是通过代码来完成,而不是 IB

以上是关于TabBarController didSelectViewController 不工作的主要内容,如果未能解决你的问题,请参考以下文章

在 TabBarController 上刷新 ViewController

NavigationController + TabBarController 上的视频问题

tabBarController 点击bar 传值

将 TabBarController 推送到视图

TabBarController

如何使用 Swift 访问 tabBarController 中的 ObjectAtIndex?