UIButton 子类@IBAction 不起作用
Posted
技术标签:
【中文标题】UIButton 子类@IBAction 不起作用【英文标题】:UIButton Subclass @IBAction not working 【发布时间】:2014-11-26 14:09:23 【问题描述】:我为 UIButton 创建了一个子类,因此我可以在点击时获得动画效果,效果有效,但当我尝试将其连接到视图控制器中的 @IBAction 时不起作用。该函数没有被调用。我将子类设置为记分牌中的按钮类。这是我的代码:
import UIKit
class SpringyButton: UIButton
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect)
// Drawing code
*/
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
UIView.animateWithDuration(0.4, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.AllowUserInteraction, animations:
self.layer.transform = CATransform3DMakeScale(0.8, 0.8, 1)
, completion: nil)
override func touchesEnded(touches: NSSet, withEvent event: UIEvent)
UIView.animateWithDuration(0.4, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.AllowUserInteraction, animations:
self.layer.transform = CATransform3DMakeScale(1, 1, 1)
, completion: nil)
override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!)
UIView.animateWithDuration(0.4, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.AllowUserInteraction, animations:
self.layer.transform = CATransform3DMakeScale(1, 1, 1)
, completion: nil)
override func touchesMoved(touches: NSSet, withEvent event: UIEvent)
UIView.animateWithDuration(0.4, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.AllowUserInteraction, animations:
self.layer.transform = CATransform3DMakeScale(1, 1, 1)
, completion: nil)
以及我的 ViewController 中的 IBAction:
@IBAction func test(sender: AnyObject)
println("go")
我不确定是什么原因造成的,有什么想法吗?
旁注:我已经读过将 UIButton 子类化并不是一个好主意,将 UIView 子类化并将其与点击手势识别器挂钩会更好吗?
谢谢。
【问题讨论】:
我不会继承 UIButton 来做到这一点。我只是将其添加为操作或其他内容的一部分。 @Fogmeister 试过了,动画不能作为动作正常工作 您绝对可以像正常操作一样执行此操作:D 您只需要为touchUpInside
、touchDownInside
等添加操作...顺便说一句,我会转换按钮本身而不是按钮的层。
我不会在任何–touched...
方法中添加任何动画...这有点奇怪。
@holex 我应该把它放在哪里?在点击手势识别器中不起作用。该按钮应该在点击时按比例缩小,并在手指抬起时按比例缩小。
【参考方案1】:
问题在于您只是覆盖了触摸事件。您必须在覆盖该函数后调用 super 。例如在下面的touchesBegan
函数中:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
UIView.animateWithDuration(0.4, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.9, options: UIViewAnimationOptions.AllowUserInteraction, animations:
self.layer.transform = CATransform3DMakeScale(0.8, 0.8, 1)
, completion: nil)
super.touchesBegan(touches, withEvent: event)
像这样,您必须将 super 添加到您覆盖的所有触摸事件中。如果您遇到任何问题,请告诉我。
【讨论】:
【参考方案2】:我相信 Interface Builder 只使用 UIButton。所以子类化不会真正起作用。如果您真的想使用您的自定义类,您可以通过编程方式创建它。
let myButton : SpringyButton = SpringyButton()
让我知道这是否有效和/或这是否是您想要的!
【讨论】:
以上是关于UIButton 子类@IBAction 不起作用的主要内容,如果未能解决你的问题,请参考以下文章