我有一个自定义的TabBarController,其中有一个更大的中心按钮,当用户按下按钮时,它会调用一个函数 centerButtonClicked 。它运行正常,但问题是没有调用委托方法 shouldSelectViewController ,因为我以编程方式设置tabBarItem。我试图手动调用委托,但即使我在方法中返回NO,它仍然选择tabBarController的视图。除自定义项之外的所有其他选项卡栏项都调用委托方法。我需要将NO返回到某个视图,以便我可以向用户显示警报视图。任何人都有解决这个问题的方法吗?
这里描述了这个问题,但它对我不起作用: How can I programmatically set selected tab of UITabBarController while also triggering shouldSelectViewController in UITabBarControllerDelegate
在AppDelegate中:
CustomTabBarControllerViewController *tabBarController = [[CustomTabBarControllerViewController alloc] init];
tabBarController.delegate = [TabBarController sharedManager];
sharedManager是一个返回控制器单例的类方法。
在CustomTabBarControllerViewController中:
- (void)centerButtonClicked:(id)sender
{
[self setSelectedIndex:2];
[self performSelector:@selector(doHighlight:) withObject:sender afterDelay:0];
[self.delegate centerButtonPressed:sender];
[self.delegate tabBarController:self shouldSelectViewController:[self.viewControllers objectAtIndex:2]];
}
更新
在CustomTabBarControllerViewController.h中,我声明了以下协议:
@protocol CustomTabBarControllerViewController <NSObject>
- (void)centerButtonPressed: (id)sender;
@end
@interface CustomTabBarControllerViewController : UITabBarController
@property (nonatomic, strong) IBOutlet UIButton *centerButton;
@property(nonatomic, weak) id<UITabBarControllerDelegate, CustomTabBarControllerViewController> delegate;
@end
这是[self.delegate tabBarController:self shouldSelectViewController:[self.viewControllers objectAtIndex:2]];的委托。是指。