[英]Custom action when clicking on UITabBarController
我有一个标签栏控制器,它添加了四个导航控制器。 导航控制器在选项卡栏控制器中显示为选项卡栏项目。 现在我想在标签栏中添加第五个按钮,它不会打开另一个视图,但会触发一些自定义代码。 我想在单击该标签栏项时显示一个重叠的“共享菜单”,无论用户在哪四个页面中。 我怎样才能做到这一点?
我可以建议在最后一个索引中添加虚拟UIViewController并处理UITabBarControllerDelegate
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if ([viewController == ...your dummy view controller...]) {
//Your custom action
return NO;
}
return YES;
}
在Storyboard中,添加一个UIVIewController并将其连接到要执行自定义操作的选项卡按钮。
给UIViewController一个唯一的标题。 例如“用于自定义动作”。 这没关系,因为没有人会看到这个头衔。 您可以在下面的代码中使用它来识别该选项卡已被点击。
创建下面的类并将其分配给Storyboard中的UITabBarController
class TabBarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { delegate = self } func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { if viewController.title == "for custom action" { //do your custom actions return false } return true } }
Krivoblotsky给出了正确的答案! 我想为那些感到困惑的人详细说明一点,因为对于完整的实现,还有一些更令人感动的部分。 假设你有以下应用程序。 当您单击主页或配置文件图标时,将显示相应的视图。 假设您要添加自定义转换/行为,而不是要显示的配置文件视图。
要做到这一点:1。给定ProfileViewController类,您希望在ProfileViewController中包含UITabBarControllerDelegate
@interface ProfileViewController : ViewController <UITabBarControllerDelegate> @end
2.访问tabBarcontroller的委托并在ProfileViewController.m的viewDidLoad中将其设置为您自己
self.tabBarController.delegate = self;
基本上这是嘿,你知道tabBarController的委托吗? (处理事件的人)我认识一个人,让这个人(自己)代替处理这些事件。 与英语一样,您将工作委托给其他人(您是委托对象)。 处理工作的事情是DELEGATE。
3.实现自定义所需的行为
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:
if ([viewController isKindOfClass:[ProfileViewController class]]){
NSLog(@"It's a profile");
return NO };
};
else{ return YES; }
NO返回表示,当选择ProfileViewController时,不执行默认行为并显示它的视图。
您应该只是实现以下UITabBarDelegate
方法:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.