我在View Controller中有一个UIButton
,它不是我应用中的根视图控制器。我无法在头文件中拖动并为其创建插座或操作。我只能从根视图控制器中完成。
这有一个简单的原因吗?
答案 0 :(得分:4)
使用storyboard时,XCode只为第一个视图控制器创建.h和.m文件(名为ViewController.h和ViewController.m)。
对于通过Interface Builder添加的每个其他视图控制器,您应手动添加其他自定义类文件以自定义视图控制器。
通过Interface Builder将视图控制器添加到故事板后,请按照以下说明操作:
UITableViewController
。然后,您应该可以按住CTRL键单击任何UIButtons
或其他UI元素到新的.h或.m文件中,并为该视图实现任何自定义行为。
如果您没有创建文件来实现自定义类,那么您将无法使用默认的UI类,例如UIViewController
,它们只有默认行为,除非您使用自定义类扩展它们。
每个视图控制器通常需要一个.m和.h文件。
答案 1 :(得分:0)
您是否正在尝试拖入该viewController的头文件?我猜你在使用故事板而不是xibs?我想我们需要更多细节。截图可能?
听起来你的助手看错了。您可以在助手视图的左上角下拉列表中将其更改为该视图控制器的匹配头文件。但正如我所说,我们需要更多细节。
答案 2 :(得分:0)
您可以将UIButton连接到定义为视图控制器一部分的插座。
如果您还将该插座设为属性,则可以向其他视图控制器公开并使该按钮可用于设置/获取/查询/等。后一种情况只有在按钮托管视图控制器存在于内存中时才会起作用(至少在最初阶段,假设视图控制器中的按钮可见,并不会出现第一个控制器可见的同时)
答案 3 :(得分:0)
是的,有一个简单的原因,虽然在你的情况下很难说出这个简单的原因是什么,因为你没有提供足够的信息。基本上,这一切都归结为视图控制器的工作方式以及它们如何从故事板加载/实例化。简短版本:
您只能在同一“场景”中的对象之间进行插座/操作。
出口/操作很复杂:如果代码中有相应的IBOutlet / IBAction,则只能创建一个。 Xcode可以帮助创建它作为插座/动作创建过程的一部分,但这仅仅掩盖了两个事实,即代码中的IBOutlet / IBAction和笔尖/故事板中的插座/动作。
通过阅读我的书中关于笔尖真正起作用的章节,你可能会得到进一步的帮助:
http://www.apeth.com/iOSBook/ch07.html#_nib_loading_and_file_8217_s_owner
这同样适用于故事板,它实际上只是将多个笔尖组合成单个文件的一种方式。然而,故事板会增加一些复杂性,因为你可以在对象之间拖动另一种类型的东西,即 relationship 或 segue (它可能是你不小心创造其中一个):
答案 4 :(得分:0)
确保NIB的文件所有者设置为正确的类。从 Interface Builder 中选择文件所有者,并确保在 Identity Inspector 选项卡中设置了正确的类: