UIButton在iOS 7中无法正常工作

Ret*_*rie 8 objective-c uibutton ios

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

ios7_button_issue

失败的按钮是UIView中的"全部丢弃"按钮.(请注意,此按钮仅暂时禁用,这不是问题.我只是没有启用按钮的最新测试的屏幕截图")

除非首先按下UITableViewCell中的"Discard"或"Retry"按钮,否则此按钮将忽略所有触摸.(这确实会导致重新加载视图控制器,这会触发再次调用ViewDidLoad等生命周期方法.)在按下表格视图单元格中的"放弃"或"重试"按钮后,"全部放弃"按钮开始正常运作.

视图和"全部丢弃"按钮构建在Controller的XIB文件上,而不是代码中.这仅在iOS7上失败,并在触摸taleview单元格按钮后立即开始工作.

有人有主意吗?

谢谢!

Ret*_*rie 17

我昨晚找到了解决方案.好的,那么我将上面的表视图和UIView元素放在目标框架上会发生什么.

我不是百分百肯定,但似乎在iOS6中按钮响应事件而不管它们放在何处.出于某种原因,在iOS7中,当按钮位于框架之外时,它应该在其中,它会忽略触摸事件,即使它确实显示出来.

我通过将视图的框架放在正确的位置来解决问题,因此它覆盖了按钮.

如果我能找到任何相关的文档,我会在这里发布.

谢谢!

  • 我通过设置cell.contentView的userInteractionEnabled = NO解决了我的问题.:) Thanx回复:)快乐的编码 (5认同)
  • 我找到问题的方法是将每个UIView的背景颜色设置为不同且明显可见的颜色.基本上,UIViewController在其中嵌入了另一个UIViewController.设置了嵌入式视图控制器的框架,使按钮不在框架内.这就是为什么它不起作用.我增加了框架的大小,以便带有按钮的UIView将在此框架内.如果您愿意,可以将您的代码/ xib发给我,以便我可以查看是否不清楚. (4认同)
  • 请详细说明你的回答.我面临同样的问题. (2认同)

Nei*_*rov 7

我刚刚面对这个问题.根据@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)