繁体   English   中英

单击UITabBarController时的自定义操作

[英]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;
}
  1. 在Storyboard中,添加一个UIVIewController并将其连接到要执行自定义操作的选项卡按钮。

  2. 给UIViewController一个唯一的标题。 例如“用于自定义动作”。 这没关系,因为没有人会看到这个头衔。 您可以在下面的代码中使用它来识别该选项卡已被点击。

  3. 创建下面的类并将其分配给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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM