我正在开发一个基于UITabBarController
的应用程序。在我的一个屏幕设计中,我需要隐藏标签栏(我使用UIView
的{{1}}方法)然后我放置了一个UIView,setHidden
通常会添加a tabBar
到UIButton
。但是,当点击按钮时,我没有得到任何回应。该按钮不会收到任何触摸事件。
我已经查看了解决方案的一些问题和答案。但是大多数都需要子类化。我已经尝试了子类化并重写了HitTest事件,但是即使在我的UIButton子类中也没有调用该方法。
我正在开发iOS 7.1。
任何人都可以对此有所了解,以及如何让按钮响应触摸事件?
修改
我的自我和@Geet更仔细地研究了这个问题。似乎放置在同一空间中的任何内容都与UIView
没有接收到触摸事件。作为测试,我创建了一个新项目,其中包含很少的代码,可以复制我原来的项目设置。
在示例应用中,我们在UITabBar
中嵌入了一个UIViewController
作为第一个标签。然后UITabBarController
嵌入UIViewController
。从那里,我们将第二个UINavigationController
推入堆栈。
点击顶部的“隐藏标签栏”按钮即可。隐藏tabBar。其中公开了UIViewController
中放置的绿色UIView
,其中storyboard
与UIButton
实施文件相关联。此按钮根本不会接收任何触摸事件。只要我将按钮移动到TabBar通常占据的空间上方,按钮就会起作用。将其向下移回屏幕底部 - 按钮不再起作用。
似乎Apple禁止ViewControllers
下的所有触摸事件。我想知道这有什么办法吗?
我试过了:
UITabBar
这也没有帮助。
也许有一种方法我们能够覆盖self.tabbar.userInteractionENabled = NO;
的子类,当UITabbarController
被隐藏时,它会允许触摸此规范?
如果有人想要使用示例项目 - 请点击我的gitHub:
答案 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();