繁体   English   中英

UIButton触摸未注册(快速)

[英]UIButton touch not registering (Swift)

我创建了一个按钮,但是由于某种原因,触摸无法识别:

override func viewDidLoad() {
        super.viewDidLoad()

        var settingsButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
        settingsButton.frame = CGRectMake(self.view.frame.size.width - 50, 35, 35, 35)
        settingsButton.setImage(UIImage(named: "settings-button"), forState: UIControlState.Normal)
        settingsButton.addTarget(self, action: Selector("settingsButtonPressed"), forControlEvents: UIControlEvents.TouchUpInside)

        self.view.addSubview(settingsButton)
}

func settingsButtonPressed(){
        println("Settings selected")
}

我没有收到任何错误,只是在我按下按钮时未注册。 我也尝试过制作UIButtonType.Custom类型的按钮,并且尝试过选择器为

Selector("settingsButtonPressed")
Selector("settingsButtonPressed:") //I changed the function to settingsButtonPressed(sender: UIButton)
"settingsButtonPressed"
"settingsButtonPressed:" //I changed the function to settingsButtonPressed(sender: UIButton)

当无法单击子视图/按钮时,有很多方法可以解决问题,下面将介绍解决此问题的可能方法。

  1. 您应该确保isUserInteractionEnabled = true

  2. 确保isEnabled = true

  3. 您可以使用Xcode 3d视图层次结构工具。 您可以在Xcode上执行此操作,方法是先运行您的应用,然后导航至无法触摸的屏幕。 单击下面以我的示例为蓝色突出显示的按钮。

XcodeGraphicalTool

完成上述操作后,当应用程序放大并旋转以查看哪些View挡住了您的按钮/视图时,您的应用程序将暂停并显示其图形层次结构。 查看下面的图片以供参考

在此处输入图片说明

  1. 最后,子视图可能无法单击,因为它不在其超级视图的范围内,因此您需要确保所有子视图都在您的超级视图范围内。

希望这对某人有帮助。

我在这里没有提到的此问题的一个常见原因是按钮的userInteractionEnabled值必须为true。

一个更独特的原因是当父视图是问题时。 在我的情况下,我在容器视图中有一个图像视图,并添加了一个按钮作为该图像视图的子视图,因此它将显示在顶部,并允许用户点击该按钮来更改图像。

在将按钮设为容器视图的子视图之前,我所做的一切都无法使按钮动作起作用,然后突然开始起作用。 在我的情况下,似乎UIImageView不允许子视图获取tap事件。

UI元素和视图控制器之间的链接很可能断开。 尝试重新创建ui元素和视图控制器之间的链接。

在视图控制器上,转到设置断点的右侧栏,然后在链接按钮的行上查找一个小圆圈。 如果已满,则说明您已链接。 如果中间是空心的,则不链接。

用这个-

self.settingsButton.addTarget(self, action: Selector("settingsButtonPressed:"), forControlEvents: UIControlEvents.TouchUpInside)

func settingsButtonPressed(sender:UIButton!){
        println("Settings selected")
}

查看如何以编程方式创建按钮的答案

由Anil提供。 我检查过了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM