选项卡控制器返回空值。

6

我在故事板中设置了一个选项卡控制器作为初始视图控制器。

enter image description here

enter image description here

这如何返回 null
UITabBarController* tabbarController = (UITabBarController*) self.tabBarController;
NSLog(@"%@",tabbarController);
NSLog(@"%@",self.navigationController.tabBarController);

我最初尝试做的事情

NSMutableArray *newTabs = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
NSLog(@"\n\n\n%lu\n\n\n",(unsigned long)[newTabs count]);
NSLog(@"self.tabBarController.viewControllers %@ \n\n",self.tabBarController);
[newTabs removeObjectAtIndex: 1];
[self.tabBarController setViewControllers:newTabs];

为什么我得到了null?

这段代码在哪里?它是在哪个方法中被调用的? - Leonardo
它被称为在 XCTabViewController.m 中,视图显示后5秒钟调用 [self performSelector:@selector(delayed) withObject:nil afterDelay:5]; - Mord Fustang
1
那么,self 不就是 UITabBarController 吗? 而不是 self.tabBarController - Leonardo
算了,你说得对。如果你发一个答案的话,我会接受它的。 - Mord Fustang
3个回答

8

返回 null 的原因是 self 是你的 UITabBarController,因此它在 self.tabBarController 上没有任何东西。

你的代码应该像这样:

NSMutableArray *newTabs = [NSMutableArray arrayWithArray:[self viewControllers]];
NSLog(@"\n\n\n%lu\n\n\n",(unsigned long)[newTabs count]);
NSLog(@"self.viewControllers %@ \n\n",self);
[newTabs removeObjectAtIndex: 1];
[self setViewControllers:newTabs];

1
好的,你找到了。这救了我。 - Anuj Kumar Rai

2
Swift
        let indexToRemove = 1
        if indexToRemove < (self.viewControllers?.count)! {
            var viewControllers = self.viewControllers
            viewControllers?.remove(at: indexToRemove)
            self.viewControllers = viewControllers
        }

UITabBarController类中直接使用self,而不是self.tabBarControllers


1

请查看Joe的答案 self.tabBarController是NULL

如果您有一个导航控制器,您需要将此添加到YourTabBarViewController.h文件中

 @property (nonatomic, retain) UITabBarController * myTabBarController;

然后在YourTabBarViewController.m文件的viewDidLoad方法中将其分配给self并添加代理

self.myTabBarController = self;
self.myTabBarController.delegate = self;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接