自定义 UIView addTarget?
Posted
技术标签:
【中文标题】自定义 UIView addTarget?【英文标题】:Custom UIView addTarget? 【发布时间】:2015-11-02 06:43:58 【问题描述】:我正在创建一个自定义 UIView
。我想知道如何在此 UIView
上复制 UIButton
行为。
我希望能够像UIButton
一样调用addTarget
。
我知道我可以继承UIControl
并调用
self.sendActionsForControlEvents(UIControlEvents.TouchUpInside);
但我想在 UIView
上进行,因为我是在 XIB 文件上设计的。
【问题讨论】:
添加带有自定义视图边界的 UIControl,背景颜色清除,然后添加 UIControl 的目标,否则将 TapGesture 添加到视图 【参考方案1】:有一种简单的方法可以实现这一点。
转到您班级的界面构建器 选择要添加动作的视图 打开 IDENTITY INSPECTOR,将类从 UIView 更改为“UIControl”。
现在您可以将任何 IBAction 方法添加到此视图。
它的工作就像魅力。 快乐编码。 希望对你有帮助
更新
它在 xCode 10.1 和 swift 4+ 中工作
【讨论】:
这非常棒,比其他解决方案好得多。以这种方式创建自定义按钮很容易,仅作为示例。这应该是正确的答案,因为在问题中请求了 touchUpInsideEvent 很好的答案.. 除了它假设每个人都使用 storybuilder 来构建 UI。错误。 这太棒了,它在没有 IB 的情况下也能工作,如果你只是声明你的类继承自 UIControl 而不是 UIView,你可以调用 addTarget! @biomiker 你是对的,你可以选择使用 IB 或调用 addTarget!干杯快乐编码。【参考方案2】:如果我们谈论 swift3 或 swift 4 会更好
let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(targetViewDidTapped))
gesture.numberOfTapsRequired = 1
targetView?.isUserInteractionEnabled = true
targetView?.addGestureRecognizer(gesture)
【讨论】:
【参考方案3】:您可以使用UITapGestureRecognizer
,以编程方式将其添加到视图中,如下所示
self.userInteractionEnabled = true
let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
gesture.numberOfTapsRequired = 1
self.addGestureRecognizer(gesture)
并实现选择器,您还可以使用 xib 或 Interface Builder 文件添加手势以查看。
【讨论】:
【参考方案4】:在 Swift 4 中有新的 init 语法 UITapGestureRecognizer:
let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("viewTapped:"))
// or declare like this
let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(YourClass.viewTapped(gesture:)))
yourView.addGestureRecognizer(gesture)
【讨论】:
以上是关于自定义 UIView addTarget?的主要内容,如果未能解决你的问题,请参考以下文章
具有自定义视图的 UIButton - addTarget:action:forControlEvents: 不起作用
在自定义视图中连接到 UIButton 的 AddTarget 不起作用。 (斯威夫特 5,iOS)
使用 UIGestureRecognizer 传递奇怪的 ios 触摸事件