我有ViewController
次{2} sub containers
。第一个sub container
指向ViewController
,其中包含TabBar
。第二个sub container
是ViewController
,其中包含collection view
。现在我的问题是尝试访问第一个sub containers
TabBar
,以便在点击项目时,我可以知道点击了哪个项目并处理我的数据。
主ViewController
有一个类。该sub containers
的所有其他ViewController
也有一个类。以下是.h
sub container
Tab Bar
的{{1}}:
#import <UIKit/UIKit.h>
@interface home_tab : UIViewController <UITabBarControllerDelegate>{
}
@end
.m
:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"working");
}
现在,当点击已填充的Tab Bar
时,永远不会调用didSelectViewController
。
我正在使用故事板。
建议和想法?
答案 0 :(得分:2)
在viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
[[self tabBarController]setDelegate:self];
// Do any additional setup after loading the view, typically from a nib.
}
这只是一个建议:)
答案 1 :(得分:2)
[[self tabBarController]selectedIndex]
这将返回所选标签的索引。
答案 2 :(得分:1)
didSelectViewController方法是UITabBarControllerDelegate协议的一部分,并在UITabBarController的委托上调用。您是否将选项卡栏控制器的委托设置为子容器的当前实例?在ViewDidLoad里面:做这样的事情:
[self.tabBarController setDelegate:self];
您还可以在UITabBar而不是控制器上设置委托,UITabBarDelegate协议包含一个方法tabBar:didSelectItem:将被调用。
答案 3 :(得分:1)
我认为你至少可以看到几个问题,
您在TabBar
内使用的是ViewController
,而不是UITabBarController
,因此您需要使用UITabBarDelegate
而不是UITabBarControllerDelegate
。您必须使用委托回调来管理视图控制器或您希望自己加载的任何视图:
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
此外,您的控制器中未定义UITabBar
,因此您的ViewController
无法在故事板中找到UITabBar
。你需要这样的东西:
@interface ViewController : UIViewController <UITabBarDelegate>
@property (weak, nonatomic) IBOutlet UITabBar *tabBar;
@end
然后,您需要控制从ViewController
拖动到UITabBar
并返回以连接故事板中的代理。
我建议使用UITabBarController
,这样您就不必自己管理视图,具体取决于您要完成的操作。
希望这有帮助!