Swift UITapGestureRecognizer 未按预期工作
Posted
技术标签:
【中文标题】Swift UITapGestureRecognizer 未按预期工作【英文标题】:Swift UITapGestureRecognizer not working as intended 【发布时间】:2016-12-27 19:11:10 【问题描述】:我有一个简单的UITapGestureRecognizer
并在其相应的方法中插入了一个打印语句。以下是我写的代码:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.segmentTapped(sender:)))
tap.numberOfTapsRequired = 1
self.segmentedControl.addGestureRecognizer(tap)
上面的代码在viewDidLoad
方法中执行。
另外,它的目标方法是:
func segmentTapped(sender: UITapGestureRecognizer)
print("called")
该程序存在的问题是,只有当segmentedControl
被点击两次 时,“被调用”一词才会在控制台中打印。如果只是轻按一次,则不会打印出来。我对为什么会发生这种情况感到困惑,因为我已将手势的 numberOfTapsRequired
属性设置为 1。
【问题讨论】:
segmentedControl
是什么类型?它的名称中包含“控制”这一事实让我认为其他东西可能正在捕捉手势
这是因为分段控件有自己的手势来处理您对其部分按钮的点击。
Doug,我正在使用一个名为 KMSegmentedControl 的第三方库。图书馆链接:cocoapods.org/pods/KMSegmentedControl
如果您想使用该分段控件,那么只需添加目标操作来处理点击。
在您提供的链接中,有一个委托“func KMSegmentedControl(selected item: UIButton)”,您可以在其中处理这些点击
【参考方案1】:
因为您使用 segmentedControl 来执行所需的操作。您可以对 segmentedControl 使用操作,而不是为 segmentedControl 添加 GestureRecognizer。就像:
@IBAction func segmentControlValueChanged(_ sender: UISegmentedControl)
if segmentControl.selectedSegmentIndex == 0
print("called")
else
// do something else
或
你甚至可以使用
self.yourSegmentedControl.addTarget(self, action:#selector(segmentTapped(_:)), forControlEvents: .ValueChanged)
func segmentTapped(sender: UISegmentedControl)
print("called")
// Do what you want
【讨论】:
以上是关于Swift UITapGestureRecognizer 未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
swift [Swift Notes]在学习Swift #Swift的同时收集笔记