Xcode:将 UIButton 类更改为自定义类后,已发送事件消失

Posted

技术标签:

【中文标题】Xcode:将 UIButton 类更改为自定义类后,已发送事件消失【英文标题】:Xcode: Sent Events Disappear upon changing UIButton class to custom class 【发布时间】:2015-03-24 21:07:29 【问题描述】:

我创建了一个自定义 UIButton 类:

class MyButton: UIButton 

然后我向我的故事板添加了一个 UIButton 并将其类更改为 MyButton。

现在,当我右键单击并拖动按钮进行编码时,我可以添加 Outlet 但不能添加 Action。 “已发送事件”部分在属性检查器中也消失了。我可能会错过什么?

【问题讨论】:

Xcode 确实很糟糕,我已经在 8.1 版本上因为同样烦人的错误而浪费了如此宝贵的时间,令人难以置信的是,Apple 如何在成熟产品的这样一个基本功能上失败,真可惜。重启对我不起作用:\ 【参考方案1】:

到目前为止,我发现的唯一技巧是将按钮类改回 UIButton,添加请求的操作,然后将类改回 MyButton:/ 错误仍然存​​在。

【讨论】:

【参考方案2】:

我可以通过保存并重新启动 Xcode 来解决此问题。

【讨论】:

【参考方案3】:

我知道这个问题已经快两年了,但我今天遇到了。重新启动 Xcode 没有帮助。我注意到在一些较旧的 .xib 中,有一些链接的已发送事件,但所有其余的 touchDown 等选项都丢失了。然而,在我将鼠标悬停在剩余的已发送事件之一的源上之后,Xcode 弹出了一条'UIButton' is no longer a valid event source 消息。 In this link,有人发现该问题与 UIButton 的扩展有关。果然,我将我们必须的 UIButton 扩展重构为 UIControl 并返回所有 Sent Event 选项。

根据 OP 的问题和我今天阅读的内容,Apple 正试图告诉我们不要理会他们的按钮。 :)

【讨论】:

【参考方案4】:

您可以轻松地使用此代码

override func awakeFromNib() 
    self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchDown)
    self.addTarget(self, action: "buttonUnClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    self.addTarget(self, action: "buttonUnClicked:", forControlEvents: UIControlEvents.TouchUpOutside)


func buttonClicked(sender: UIButton)
    self.backgroundColor = UIColor.redColor()

func buttonUnClicked(sender: UIButton)
    self.backgroundColor = UIColor.blackColor()

【讨论】:

以上是关于Xcode:将 UIButton 类更改为自定义类后,已发送事件消失的主要内容,如果未能解决你的问题,请参考以下文章

无法将UIButton的自定义类更改为GIDSignInButton

对于 iOS,将 ViewController.xib 自定义类更改为另一个类是啥意思?

PKAddPassButton 不适用于 iOS 9

自定义 UIButton - IBAction 不起作用

如何将 iOS 项目更改为根本不使用 nib 而只使用 Objective-C 代码?

使用 XIB 创建自定义 UIView