【问题标题】:UIbutton only looks clicked (highlighted) on longPress?UIbutton 仅在 longPress 上看起来被点击(突出显示)?
【发布时间】:2016-12-29 00:10:03
【问题描述】:

这似乎是一个有点奇怪的问题。我在 tableView 中的迭代 tableViewCell 中有一个 UIButton,它被放置在常规 ViewController 中。出于某种原因,它在长按时看起来只是被点击(从默认的蓝色突出显示为浅蓝色,然后又回到蓝色)。它会在常规点击时执行我分配给它的任何操作(刚刚从普通的旧打印语句开始),但只是没有 look 点击。有人知道如何解决这个问题吗? 按钮处于正常状态:

点击后的按钮:

长按后的按钮(对不起,不得不用手机拍照)

编辑:这与 iOS7 问题中的答案不同,因为我正在寻找 iOS 10 快速解决方案,而不是 Objective-c。 iOS7也没有

【问题讨论】:

  • 您可以添加屏幕截图或 gif 以显示发生了什么吗?我不能从你的描述中看出发生了什么。
  • @Jadar ,我已经发布了相关图片。正常状态和单击按钮后的外观完全相同。只有长按才会高亮(变亮),松开后又恢复到正常状态颜色
  • @Jadar 我看了一下那个问题,但找不到解决方案。这是iOS10,我是用swift编程,而不是objective-c
  • 该答案可转换为 Swift 并且确实回答了这个问题。唯一的问题是使用私有类并将表格视图修改为提交,这绝不是一个好主意。

标签: xcode uibutton


【解决方案1】:

这是正常行为。这是由于 UIScrollView 的 delaysContentTouches 属性。根据 Apple 的docs

如果这个属性的值为YES,滚动视图延迟处理 触摸向下手势,直到它可以确定滚动是否是 意图。如果值为 NO ,则滚动视图立即调用 touchesShouldBegin:withEvent:inContentView:.

编辑: This answer 给出了以下解决方案。我已经测试过了,它确实有效。但是,由于它正在施展魔法,我不建议您实际执行此操作,因为当 Apple 决定在幕后更改其视图层次结构时,它不可避免地会中断。

tableView.delaysContentTouches = false
for case let x as UIScrollView in tableView.subviews {
    x.delaysContentTouches = false
}

旧答案: This answer 提供了一个解决方案,但它确实是一个 hack,并且可能会导致您的应用由于使用私有类而被 Apple 拒绝。由于该行为确实是一项功能,因此我建议您保持原样。

【讨论】:

  • 我不确定这是否有意义;按钮动作被立即调用,它只是不会发生的突出显示。如果它本质上是在等待应用程序确定它是否滚动,为什么立即调用该操作?此外,在tableViewController 中(这个问题的场景是tableView 放入ViewController),这不会发生。没有延迟,可以看到一个按钮立即按下。
  • 奇怪的是action被处理了但是UI被延迟了。但是,当我测试时,我使用 UITableViewController 进行了测试,并且确实看到了延迟。
  • 所以我认为这与 UITableView 使用的不同 UIScrollViews 有关。不管它是如何创建的。
  • 好的,我想试试这个。这个代码块在哪里? cellForRowAt IndexPath?
  • 没关系,我明白了。但是当他们改变视图层次结构时会发生什么?就没有解决办法吗?
猜你喜欢
  • 2017-05-20
  • 2019-11-30
  • 2022-01-04
  • 2013-07-05
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多