自定义 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)

UIView 内的 UIButton 目标操作

使用 UIGestureRecognizer 传递奇怪的 ios 触摸事件

在另一个自定义 UIView 中设置/更改嵌套自定义 UIView 的变量

自定义 UITableViewCell 中的自定义 UIView