将UIButton放置在与UITabBar相同的空间中(隐藏时)

时间:2014-07-28 07:27:39

标签: ios objective-c uiview uibutton

我正在开发一个基于UITabBarController的应用程序。在我的一个屏幕设计中,我需要隐藏标签栏(我使用UIView的{​​{1}}方法)然后我放置了一个UIView,setHidden通常会添加a tabBarUIButton。但是,当点击按钮时,我没有得到任何回应。该按钮不会收到任何触摸事件。

我已经查看了解决方案的一些问题和答案。但是大多数都需要子类化。我已经尝试了子类化并重写了HitTest事件,但是即使在我的UIButton子类中也没有调用该方法。

我正在开发iOS 7.1。

任何人都可以对此有所了解,以及如何让按钮响应触摸事件?

修改

我的自我和@Geet更仔细地研究了这个问题。似乎放置在同一空间中的任何内容都与UIView没有接收到触摸事件。作为测试,我创建了一个新项目,其中包含很少的代码,可以复制我原来的项目设置。

在示例应用中,我们在UITabBar中嵌入了一个UIViewController作为第一个标签。然后UITabBarController嵌入UIViewController。从那里,我们将第二个UINavigationController推入堆栈。

点击顶部的“隐藏标签栏”按钮即可。隐藏tabBar。其中公开了UIViewController中放置的绿色UIView,其中storyboardUIButton实施文件相关联。此按钮根本不会接收任何触摸事件。只要我将按钮移动到TabBar通常占据的空间上方,按钮就会起作用。将其向下移回屏幕底部 - 按钮不再起作用。

似乎Apple禁止ViewControllers下的所有触摸事件。我想知道这有什么办法吗?

我试过了:

UITabBar

这也没有帮助。

也许有一种方法我们能够覆盖self.tabbar.userInteractionENabled = NO; 的子类,当UITabbarController被隐藏时,它会允许触摸此规范?

如果有人想要使用示例项目 - 请点击我的gitHub:

https://github.com/TanderZA/UIButton-in-UITabbar-Space

3 个答案:

答案 0 :(得分:5)

Tander我终于弄清楚了,按钮没有响应,因为它没有收到我们的触摸事件,你看到在我们的故事板中,View没有连接到viewController,因此当我以编程方式将按钮添加到View时它永远不会响应,一条简单的线解决了这个

在功能

- (IBAction)doneButton:(UIBarButtonItem *)sender

就这样做

- (IBAction)doneButton:(UIBarButtonItem *)sender
{
    /* Will hide or unhide the tabBar */

    self.tabBarController.tabBar.hidden=YES;
    [self.tabBarController setTabBarItem:nil];

    UIButton *butt=[UIButton buttonWithType:UIButtonTypeCustom];
    butt.backgroundColor=[UIColor redColor];
    butt.frame=CGRectMake(160, 530, 93, 40);
    [butt addTarget:self action:@selector(testButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self.tabBarController.view addSubview:butt];



}

self.tabBarController.view是我们的罪魁祸首,不让触摸事件通过,很高兴找到它

答案 1 :(得分:4)

我最近自己遇到过这种情况,在我的情况下,向delete a添加视图不是一种选择。

将tabBar设置为半透明(除了隐藏它)允许触摸通过。

self.tabBarController.view

答案 2 :(得分:1)

我最近遇到了这个问题,我们使用UITabBar隐藏isHidden,但UIView下面的一个子视图控制器中的UITabBar不会收到匹配事件。它在任何地方都收到了活动,但UITabBar曾经是可见和定位的地方。

来回转动手机会让问题消失。我最终找到的解决方案是在将isHidden设置为true后,您需要在setNeedsLayout视图上调用UITabBarController

self.tabBarController.tabBar.isHidden = true;
self.tabBarController.view.setNeedsLayout();