UIButton 触摸未注册(Swift)

Ran*_*ens 2 iphone target uibutton ios 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")
}
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,只是在我触摸按钮时没有注册。我也试过制作一个 UIButtonType.Custom 类型的按钮,我试过选择器作为

Selector("settingsButtonPressed")
Selector("settingsButtonPressed:") //I changed the function to settingsButtonPressed(sender: UIButton)
"settingsButtonPressed"
"settingsButtonPressed:" //I changed the function to settingsButtonPressed(sender: UIButton)
Run Code Online (Sandbox Code Playgroud)

Vis*_*ela 6

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

  1. 你应该确保 isUserInteractionEnabled = true

  2. 确保 isEnabled = true

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

Xcode图形工具

执行上述操作后,您的应用程序将暂停并显示您的应用程序的图形层次结构,当它放大和旋转以查看阻止您的按钮/视图的视图时。检查下面的图像以供参考

在此处输入图片说明

  1. 最后,子视图可能无法点击,因为它在其超级视图的边界之外,因此您需要确保所有子视图都在您的超级视图边界内。

希望这可以帮助某人。


Saf*_*ive 5

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

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

我所做的一切都不会使按钮动作起作用,直到我尝试使按钮成为容器视图的子视图,然后它突然开始工作。在我的情况下,UIImageView 似乎不允许子视图获取点击事件。