2010-03-27 52 views
0

为了快速模拟UI,我希望能够将按钮拖到界面构建器的视图中,然后将连接从该按钮拖到应该在单击时显示的视图中。将插座添加到UIButton

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

@interface UIButton (myextensions) { 
    IBOutlet UIView *outletDestination; 
} 
@end 

可以通过这种方式添加额外的网点吗?

回答

2

可以通过这种方式添加额外的插座吗?

没有。你不能通过在一个类别中声明它们来添加实例变量。

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

我不认为你可以做到这一点,如果你打算为属性做一个自定义访问者(你必须使用@synthesize),但它听起来并不像你的情况那么重要:你只是嘲笑用户界面,所以你不会写自定义访问器。

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

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

+0

如果我将@property添加到UIButton类别中,我不能使用@synthesize,因为它是一个类别,并且我不能编写自己的方法,因为没有ivar来存储数据。如果我创建了插座在IB中,“[ setValue:forUndefinedKey:]:此类不是关键目标的关键字编码兼容值。”我也用UIRoundedRectButton尝试了上述所有内容。 – alltom 2010-03-28 17:57:32

+0

在IB中添加网点只对嘲笑起作用;当你开始真正的编程时,你可以并且应该在头文件中声明出口。你是什​​么意思“我不能使用'@ synthesize'”?当你尝试时会发生什么? – 2010-03-29 00:20:47

+0

对不起,我错过了你的评论;我认为我没有收到电子邮件通知。使用@synthesize的错误是这样的:“@synthesize不允许在类别的实现中” – alltom 2010-05-19 07:13:28