UIButton 没有注册触摸

Posted

技术标签:

【中文标题】UIButton 没有注册触摸【英文标题】:UIButton is not registering touches 【发布时间】:2016-11-25 01:35:24 【问题描述】:

我在我的一个视图控制器中向导航栏添加了带有自定义图像且没有文本的 UIButton。在那个导航栏中也是默认按钮返回。

我将该 UIButton 与 Connection:Action、Type:UIButton、Event:Touch Up Inside 和 Arguments:Sender 连接起来。

当我点击那个按钮时,什么也没有发生,它根本没有注册触摸。按钮返回正常工作。

为什么会这样?如何解决?

【问题讨论】:

你没有拍照,我怀疑你没有设置button's尺寸,可能太小了 不小。尺寸为 35x35。你可以看得很清楚。 你能拍下你帖子里的照片吗? 你是通过navigationController?.navigationBar.addSubview(myButton)还是navigationItem.rightBarButtonItem = UIBarButtonItem(customView: myButton)添加的? @paulvs 我只是将它拖到Main.storyboard 到导航栏,然后将它与View Controller 连接起来,就像你通常的连接按钮一样。 【参考方案1】:

试试这个:

    由于您要将其添加到导航栏,因此它必须是 UIBarButtonItem。因此,您要连接的操作插座必须具有 UIBarButtonItem 类型,而不是 UIButton

    检查UIBarButtonItem的插座是否连接正确。

    检查UIBarButtonItem的用户交互是否开启。

【讨论】:

我无法将UIBarButtonItem 拖到Navigation Bar 中的View Controller。我只能将UIBarButtonItem 拖到主Navigation Bar。如果Navigation Bar 有后退按钮,我无法将UIBarButtonItem 拖到Main.storyboard 中。 是的,因为 UIBarButtonItem 仅用于添加到条形图而不是其他任何地方。但是你仍然可以在视图控制器类中拖放它的出口。【参考方案2】:

当我点击那个按钮时,什么也没有发生,它根本没有注册触摸。

99% 的情况下,当我看到此投诉时,原因是您以某种方式将按钮置于其超级视图之外。其父视图之外的按钮是可见的(默认情况下)但不可触摸。 (有时会发生这种情况,因为超级视图本身从未指定大小,因此大小为零;有时是由于其他原因。)

我不能再告诉你了,因为没有再告诉你(即你没有详细说明这个按钮是如何进入导航栏的)。但我敢打赌,如果你深入挖掘,你会发现我的猜测是正确的。

【讨论】:

嗨,我刚刚将该按钮拖到 Main.storyboard 中的导航栏并设置约束、高度和宽度。我添加了图片,以便您更好地查看它的外观。【参考方案3】:

我通过先将导航项添加到导航栏然后将按钮添加到导航项来解决它。

【讨论】:

【参考方案4】:

要在导航栏上添加按钮,您必须像这样添加:

 let leftButton = UIBarButtonItem(title: "abc", style: .Plain, target: self, action: #selector(ViewController.buttonClicked(_:)))
 let navigationItem = UINavigationItem()
 navigationItem.titleView = UIImageView(image: UIImage(named: "image.png"))
 navigationItem.leftBarButtonItem = leftButton

这是左键。同样的方法也可以添加右键。

【讨论】:

以上是关于UIButton 没有注册触摸的主要内容,如果未能解决你的问题,请参考以下文章

按钮未在自定义 UIButton 中注册触摸

禁用 UIButton 注册触摸并引发错误

以编程方式将 UIButton 添加到 UINavigationBar 的子视图,并且触摸事件未注册

Swift:触摸不立即注册位于UIViewController底部的UIButtons

UIButton没有在ios7上注册

UITableViewCell 子类中的 UIButton 未注册点击