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 = true
和UIButton.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操作,而不只是一个看法。
- Swift – 如何将自定义字段添加到Google Maps SDK中的标记?
- 如何以编程方式解除UIAlertController没有任何button?
- Swift:解包导致快速编译
- 使用iPhone作为iBeacon发射机
- 我们能否处理错误“不能将BOOLtypes的值转换为预期的参数UIiew”
- 在swift中实现自定义markerInfoWindow不起作用
- 确保在Firebase中创build新用户的唯一用户名(Swift)
- 如何在Swift中打开数组的元素? (即Array <Int?> as Array <Int>)
- 如何从PageViewController访问ViewController组件