UIview下的UIButton无法触摸
Posted
技术标签:
【中文标题】UIview下的UIButton无法触摸【英文标题】:UIButton Under UIview cannot touched 【发布时间】:2016-10-25 07:55:49 【问题描述】:我在UIView
下添加了UIButton
,但我添加了无法触及的操作目标:
这是我的代码:
testview.swift
import UIKit
class testview: UIView
@IBOutlet var comment:UIButton!
在viewconrtroller.swift
class ViewController:UIViewController,UIScrollViewDelegate
@IBOutlet var inner:testview!
@IBOutlet var sc: UIScrollView!
override func viewDidLoad()
super.viewDidLoad()
sc.delegate = self
sc.isScrollEnabled = true
sc.delaysContentTouches = false
sc.contentSize = CGSize(width:320, height:1805)
inner.isUserInteractionEnabled = true
inner.isExclusiveTouch = true
inner.comment.isEnabled = true
inner.comment.addTarget(ViewController(), action: #selector(touched(_:)), for: .touchUpInside)
@IBAction func fullcomment(_ sender: UIButton)
print("touched")
【问题讨论】:
为什么视图下需要一个按钮? 我使用滚动视图并在uiscrollview下添加uiview 你的意思是说你有一个滚动视图,在那个滚动视图里面有一个视图和一个按钮,它在滚动视图的那个视图后面? 是的,我的意思是我的层是 Viewcontroller-->ScrollView-->UIView 按钮在哪里? 【参考方案1】:改变
inner.comment.addTarget(ViewController(), action: #selector(touched(_:)), for: .touchUpInside)
到
inner.comment.addTarget(self, action: #selector(fullcomment(_:)), forControlEvents: .TouchUpInside)
【讨论】:
【参考方案2】:可能有多种原因: 1. UIView 框架。 2. UIButton 框架。 3. InnerView 即 TestView(是专用 XIB 中的 customView 还是自定义视图)。 还有更多取决于您的实施。
你可以试试这个:
override func viewDidLoad()
super.viewDidLoad()
sc.delegate = self
sc.isScrollEnabled = true
sc.delaysContentTouches = false
sc.contentSize = CGSize(width:320, height:1805)
inner.isUserInteractionEnabled = true
inner.isExclusiveTouch = true
inner.comment.isEnabled = true
inner.comment.addTarget(self, action: #selector(fullcomment), forControlEvents: .touchUpInside)
func fullcomment(sender: UIButton)
print("touched")
这里您的选择器名称不同。我不确定你是否有其他的方法。
只需从 interfacebuilder 创建 IBAction。
如果情况是第 3 个,那么您应该在 TestView 类本身中添加目标。
【讨论】:
是的,你现在可以在 Swift 3 中使用它 那么你的答案是错误的#selector(fullcomment) 怎么了?之前你可以使用 #selector(functionName(_:)) 但现在在 Swift3 中你可以使用 #selector(functionName).. 我觉得没问题。即使我们不提供 (_:) 之类的参数,我们也会在其操作中获得按钮的引用。试试看 @yasuhiro 有帮助吗?【参考方案3】:inner.comment.addTarget(self, action: #selector(fullcomment), for: .touchUpInside)
// 动作
@IBAction func fullcomment(_ sender: UIButton)
print("touched")
sc.isUserInteractionEnabled = true
inner.isUserInteractionEnabled = true
inner.comment.isEnabled = true
【讨论】:
以上是关于UIview下的UIButton无法触摸的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 UIView 上的触摸并检测单击哪个 UIView 类似于 UIButton 上的触摸?
UIView 处理手势,内部 UIButton 应该捕捉触摸
尽管 userInteractionEnabled = true,但 UIView 中的 UIButton 没有响应触摸事件
为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?