Swift中的UIButton没有注册触摸

我试图用Swift创build一个UIButton。 它编译好,我可以在模拟器中看到我的button,但是当我点击它,没有任何反应。 这是我正在使用的代码:

let settings = UIButton() settings.addTarget(self, action: "touchedSet:", forControlEvents: UIControlEvents.TouchUpInside) settings.setTitle("Settings", forState: .Normal) settings.frame = CGRectMake(0, 530, 150, 50) scrollView.addSubview(settings) 

在同一个类中,这里是“touchedSet”函数:

 func touchedSet(sender: UIButton!) { println("You tapped the button") } 

我使用模拟器,因为我没有iOS 8.0设备,这可能是问题吗?

谢谢!

我看到这是一个老问题,但昨天我只是遇到了非常类似的问题。 我的button在触摸时突出显示,但不会触发操作。

我有两个视图控制器。 一个视图覆盖其他视图和button在顶视图上。

例如。

  • Rootview控制器有后视图

  • Topviewcontroller有顶视图

如果我不添加topviewcontroler作为rootviewcontroller的childviewcontroller顶视图上的button不会调用该操作。 作为childviewcontroller添加topviewcontroller后,它开始工作。

所以简而言之:只要尝试使用以下方法将buttonsuperview的视图控制器作为childviewcontroller添加到父视图viewcontroller

 func addChildViewController(_ childController: UIViewController) 

select器是一个必须被创build的结构。

这样做…

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

这应该做到这一点。

在模拟器中,有时它不能识别select器。 似乎有一个错误。 我只是改变了行动名称(select器),它的工作。

 let buttonPuzzle:UIButton = UIButton(frame: CGRectMake(100, 400, 100, 50)) buttonPuzzle.backgroundColor = UIColor.greenColor() buttonPuzzle.setTitle("Puzzle", forState: UIControlState.Normal) buttonPuzzle.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) buttonPuzzle.tag = 22; self.view.addSubview(buttonPuzzle) 

select器function在这里:

 func buttonAction(sender:UIButton!) { var btnsendtag:UIButton = sender if btnsendtag.tag == 22 { //println("Button tapped tag 22") } } 

对于那些如何也困在教程中:

当我跟着苹果“开始开发iOS应用(Swift)”时,我遇到了同样的问题。 事实certificate,我已经在教程中监督了这些代码行

 override var intrinsicContentSize : CGSize { return CGSize(width: 240, height: 44) } 

将它们添加到我RatingControl修复了这个问题。

我有这个问题,当我的button的父视图isUserInteractionEnabled == false 。 所有子视图都将具有与其父视图相同的userInteraction 。 所以我刚刚添加了这一行parentView.isUserInteractionEnabled = true ,问题消失了。 希望这有助于某人。

我只能看到一个问题:您必须使用Selector来设置action ,如下所示:

 settings.addTarget(self, action: Selector("touchedSet:"), forControlEvents: UIControlEvents.TouchUpInside) 

不要忘记插入:如果你需要传递参数给函数。

你在同一class上面说过 确保button代码本身位于viewDidLoad()中,如果您正在使用视图,则该操作在其外部,但在类内部。

所以你应该使用下面的行

 settings.userInteractionEnabled = true 

从Apple的教程的问题是,他们把UIView(RatingControl)在StackView内,这是不正确的。 UIView(RatingControl)应该在StackView之外。 所以,解决方法是:1.拖动UIView(RatingControl)到StackView的外部2.设置Rating控件新位置的约束 – Container的等于零的前边距 – Container的尾边等于零 – 上边距StackView等于零

有了这个新的约束条件,现在RatingControl和Container一样,无论设备的屏幕大小是什么,总是会在StackView的后面出现照片select器。

我希望这可以帮助你们。

老问题,但认为我会帮助其他人寻找这个问题。 首先,我不完全确定这是正确的,所以如果我错了,请纠正我。

但是,如果您错误地设置了select器,那么当您按下button时,应用程序会崩溃,因为它订阅了不存在的select器。 这意味着你的select器正在工作。 我的猜测是,其他东西是阻止触摸事件,假设UIButton.enabled = trueUIButton.userInteractionEnabled = true 。 通常你可以通过长按button来查看它是否被击中。 如果是这样,那么你有一个UIGestureRecognizer添加到某个地方,首先接受命中。 也可能是延迟触摸input的UIScrollView (在检查器中有一个checkbox)。

希望这有助于某人,并希望这是准确的。

如果你正在使用storyboard,请确保你在代码中将你的button和你的IBOutlet实例variables连接起来。

我发现了类似Swift 2的例子,并且适用于Swift 3.经testing,它工作得很好。 我希望它有帮助。

 // http://lab.dejaworks.com/ios-swift-3-playground-uibutton-action // Trevor D. Beydag import UIKit import PlaygroundSupport class Responder : NSObject { func action() { print("Button pressed!") } } let containerView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 300.0, height: 600.0)) PlaygroundPage.current.liveView = containerView let responder = Responder() let button = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50)) button.backgroundColor = UIColor.green button.setTitle("TEST", for: .normal) button.addTarget(responder, action: #selector(Responder.action), for: .touchUpInside) containerView.addSubview(button) 

我有一个类似的问题,当我有一个与button和tapHandlers匹配的subViewController,我想把它放在一个单独的superViewController的堆栈。

这导致没有tapHandlers触发,解决scheme是,而不是只使用addArrangedSubview(subViewController.view),我也在addChildViewController(subViewController)使用addChildViewController(subViewController) ,以允许childViewController继续作为viewController操作,而不只是一个看法。