脚本宝典收集整理的这篇文章主要介绍了

【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

本blog除部分译文外,所有内容均为原创,如有雷同,算我抄你:-)

问题描述

问题来自于iOS UIButton 的 touchDown 事件这篇帖子。简单地说,在设置

detailVC.hidesBottomBarWhenPushed = YES;

之后,放一个view在tabbar原来的位置上,再在view上添加一个button,像这样
【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event-脚本宝典
为button添加touchDown action,当按住button的左下角区域时,action没有被触发。

触发环境

iOS 7或以上,真机调试。

分析过程

先查看HitTest的结果,button实例被正确地返回了。这说明button并没有被透明的view所遮盖。
接着,override button的touchesXXX方法。当按下button的左下角时,touchesBegan等4个方法完全没有被调用到。参考下图
【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event-脚本宝典
应该存在一个gesture recognizer,并且delaysTouchesBegan设置为YES。

delaysTouchesBegan (default of NO)—Normally, the window sends touch objects in the Began and Moved phases to the view and the gesture recognizer. Setting delaysTouchesBegan to YES prevents the window from delivering touch objects in the Began phase to the view. This ensures that when a gesture recognizer recognizes its gesture, no part of the touch event was delivered to the attached view. Be cautious when setting this property because it can make your interface feel unresponsive.

考虑当前场景,应该是滑动返回手势捣的鬼。稍微验证一下

- (void)viewDidLoad
{
    //Other codes here
    NSLog(@"%d", self.navigationController.interactivePopGestureRecognizer.delaysTouchesBegan);
}

得到结果
【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event-脚本宝典
那么答案就很明显了。

解决方案

self.navigationController.interactivePopGestureRecognizer.delaysTouchesBegan = NO;

Demo

Button touch down bug fix

参考资料

Placing a UIButton in the same space as UITabBar (When hidden)

总结

以上是脚本宝典为你收集整理的

【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event

全部内容,希望文章能够帮你解决

【SDK fix】iOS 8下将UIButton放置于tabbar位置无法响应event

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过