Ret*_*rie 8 objective-c uibutton ios
我有一个UIButton的问题,它在iOS6中运行得非常好,但是在某些时候无法响应iOS7中的触摸事件.澄清请看下图:

失败的按钮是UIView中的"全部丢弃"按钮.(请注意,此按钮仅暂时禁用,这不是问题.我只是没有启用按钮的最新测试的屏幕截图")
除非首先按下UITableViewCell中的"Discard"或"Retry"按钮,否则此按钮将忽略所有触摸.(这确实会导致重新加载视图控制器,这会触发再次调用ViewDidLoad等生命周期方法.)在按下表格视图单元格中的"放弃"或"重试"按钮后,"全部放弃"按钮开始正常运作.
视图和"全部丢弃"按钮构建在Controller的XIB文件上,而不是代码中.这仅在iOS7上失败,并在触摸taleview单元格按钮后立即开始工作.
有人有主意吗?
谢谢!
Ret*_*rie 17
我昨晚找到了解决方案.好的,那么我将上面的表视图和UIView元素放在目标框架上会发生什么.
我不是百分百肯定,但似乎在iOS6中按钮响应事件而不管它们放在何处.出于某种原因,在iOS7中,当按钮位于框架之外时,它应该在其中,它会忽略触摸事件,即使它确实显示出来.
我通过将视图的框架放在正确的位置来解决问题,因此它覆盖了按钮.
如果我能找到任何相关的文档,我会在这里发布.
谢谢!
我刚刚面对这个问题.根据@Guntis Treulands的建议,我决定检查如果我hitTest:withEvent:在自定义标题视图中覆盖方法会发生什么.此方法忽略隐藏的视图对象,禁用用户交互或alpha级别小于0.01的视图对象.在确定命中时,此方法不会考虑视图的内容.因此,即使指定的点位于该视图内容的透明部分中,现在仍然可以返回视图,现在,在覆盖它之后,接收到边界外的触摸.它为我做了伎俩.伙计们,希望它对你有所帮助.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
for (UIView *subview in self.subviews.reverseObjectEnumerator) {
CGPoint subPoint = [subview convertPoint:point fromView:self];
UIView *result = [subview hitTest:subPoint withEvent:event];
if (result != nil) {
return result;
}
}
}
// use this to pass the 'touch' onward in case no subviews trigger the touch
return [super hitTest:point withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14264 次 |
| 最近记录: |