检查何时单击TabBar项目 - 目标C.

时间:2014-04-10 14:16:08

标签: ios objective-c uitabbarcontroller uitabbar

我有ViewController次{2} sub containers。第一个sub container指向ViewController,其中包含TabBar。第二个sub containerViewController,其中包含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

我正在使用故事板。

建议和想法?

4 个答案:

答案 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)

我认为你至少可以看到几个问题,

  1. 您在TabBar内使用的是ViewController,而不是UITabBarController,因此您需要使用UITabBarDelegate而不是UITabBarControllerDelegate。您必须使用委托回调来管理视图控制器或您希望自己加载的任何视图:

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

  2. 此外,您的控制器中未定义UITabBar,因此您的ViewController无法在故事板中找到UITabBar。你需要这样的东西:

        @interface ViewController : UIViewController <UITabBarDelegate>
    
        @property (weak, nonatomic) IBOutlet UITabBar *tabBar;
    
        @end
    

    然后,您需要控制从ViewController拖动到UITabBar并返回以连接故事板中的代理。

    我建议使用UITabBarController,这样您就不必自己管理视图,具体取决于您要完成的操作。

    希望这有帮助!