UIButton触摸没有注册(Swift)

时间:2014-10-07 22:39:22

标签: ios iphone swift uibutton target

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

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)

4 个答案:

答案 0 :(得分:2)

我在此处未提及此问题的一个常见原因是该按钮的userInteractionEnabled值必须为true。

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

我做的任何事情都不会让按钮操作起作用,直到我尝试使按钮成为容器视图的子视图,它突然开始工作。在我的情况下,看起来UIImageView不允许子视图获取点击事件。

答案 1 :(得分:2)

当子视图/按钮无法点击时,有很多方法可以解决问题,我将在下面提到修复它的可能方法。

  1. 你应该确保isUserInteractionEnabled = true

  2. 确保isEnabled = true

  3. 您可以使用Xcode 3d视图层次结构工具。您可以通过首先运行应用程序在Xcode上执行此操作,然后导航到触摸不起作用的屏幕。按照下面的示例单击蓝色突出显示的按钮。

  4. XcodeGraphicalTool

    完成上述操作后,您的应用将会暂停,并且当您的应用放大并旋转以查看哪些视图阻止您的按钮/视图时,系统会显示您的应用的图形层次结构。查看下面的图片以供参考

    enter image description here

    1. 最后,子视图可能无法点击,因为它超出了其超级视图的范围,因此您需要确保所有子视图都在您的超视图范围内。
    2. 希望这有助于某人。

答案 2 :(得分:0)

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

在视图控制器上,查看设置断点的右侧栏,并在按钮链接的行上查找一个小圆圈。如果它已填满你的链接。 如果中间是空心的,则它没有联系。

答案 3 :(得分:0)

使用此 -

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

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

查看How to create a button programmatically?

的答案

由Anil提供。它检查了。