向 UIButton 添加插座

Posted

技术标签:

【中文标题】向 UIButton 添加插座【英文标题】:Adding outlets to UIButton 【发布时间】:2010-03-27 09:51:32 【问题描述】:

为了快速模拟 UI,我希望能够将按钮拖到界面构建器中的视图上,然后将连接从该按钮拖到单击它时应该出现的视图。

UIButton 的子类在 IB 中使用有点不方便,所以我更愿意将行为添加到 UIButton 本身。不幸的是,在某个类别中创建的网点似乎在 IB 中不可见:

@interface UIButton (myextensions) 
    IBOutlet UIView *outletDestination;

@end

这样可以增加额外的插座吗?

【问题讨论】:

【参考方案1】:

这样可以增加额外的插座吗?

不。您不能通过在类别中声明它们来添加实例变量。

但是,您可以添加属性,并且可以将IBOutlet 放在属性上,这样您就可以通过这种方式添加网点。使用现代运行时(iPhone 上唯一可用的运行时),属性可以添加实例变量。

如果您打算为该属性创建自定义访问器(您必须使用@synthesize),我认为您不能这样做,但这听起来对您的情况并不重要:您只是在嘲笑向上 UI,因此您无需编写自定义访问器。

或者,您可以在 IB 本身的“库”面板的“类”选项卡上创建出口。在那里选择一个类,然后在下面的窗格中选择 Outlets 选项卡,然后将一个 outlet 添加到列表中。

您需要为其他解决方案打开一个笔尖,否则不会显示任何课程。这是因为它是上下文相关的:Mac nib 将具有 AppKit 类(如 NSButton),而 iPhone nib 将具有 UIKit 类。

【讨论】:

如果我将 @property 添加到 UIButton 类别,我不能使用 @synthesize 因为它是一个类别,并且我不能编写自己的方法,因为没有 ivar 来存储数据。如果我在 IB 中创建插座,“[ setValue:forUndefinedKey:]:此类不符合键目标的键值编码。”我也用 UIRoundedRectButton 尝试了上述所有方法。 在 IB 中添加网点只对模拟有用;当您开始实际编程时,您可以并且应该在标题中声明插座。 “我不能使用@synthesize”是什么意思?当你尝试时会发生什么? 很抱歉我错过了您的评论;我想我没有收到电子邮件通知。使用@synthesize 的错误是:“@synthesize not allowed in a category's implementation” alltom:嗯。你是对的。抱歉走错路了。我想您必须使用关联引用代替 ivars 来实现自定义访问器,但文档似乎表明该功能在 Cocoa Touch 中尚不可用。 developer.apple.com/iphone/library/documentation/Cocoa/… 这就是我想要的!啊,好吧。

以上是关于向 UIButton 添加插座的主要内容,如果未能解决你的问题,请参考以下文章

初始化后访问自定义 UIButton 类中的插座

向 UIButton 添加其他视图

如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?

如何向 UIButton 添加阴影?

向uibutton添加声音

来自 UITableViewCell 内的 UIButton 的 IBAction