随着我将越来越多的UI构建从XCode移动到IB,我还需要解决一个障碍。
目前,我使用自定义初始值设定项在XCode中创建自定义viewControllers。它们通常有一堆ivars,在初始化期间通过传递的参数设置。我真的想尽可能多地将这一点转移到IB。
有人可以仔细向我解释 - 或者,更好的是,请指出代码 - 如何复制通过IB中的自定义初始化程序传递params的XCode方法 - 可能是通过IBOutlet。
提前致谢。
干杯, 道格
更新:
一个典型的scenerio是我的AppDelegate会去网络,获取一些数据 - NSMutableData,然后传递一个对象的一个根视图控制器 - 通常是一个TableViewController - 它被推送到navigationController的viewController堆栈上。
当选择单元格时,将分配/初始化secondViewController,并将数据的子集传递给它。第二个ViewController进入网络获取更多数据,构建视图层次结构,将检索到的数据部分交给每个子视图,然后使用setNeedsDisplay对每个子视图进行消息处理数据。
这种分层数据传递是我想要传递给IB的。
答案 0 :(得分:3)
您仍然可以拥有自定义初始值设定项。但是,在此初始化中,您将调用-[initWithNibName:@"yourNibName" bundle:bundle]
。您将在“接口”构建器中连接UIKit
相关实例变量(UILabel
,UIButton
等),因此不必在初始化程序中实例化这些对象。您将在初始化程序中实例化和设置的其他实例变量(字符串,字典,自定义对象等)。
此外,请注意,操纵UIKit
相关变量(例如设置标签文字或设置UIView
的位置)应在viewDidLoad
方法中完成,因为这些初始化程序执行时可能尚未完全创建对象。
如果您需要更多信息,请与我们联系。
答案 1 :(得分:2)
假设我们有MyViewController,它扩展了UIViewController和MyViewControllerParameter,它是我们在初始化时传递给MyViewController的自定义对象之一。 MyViewController中定义了一个类型为MyViewControllerParameter的IBOutlets。我们想将MyViewController放入另一个包含视图的ParentView.xib中。 ParentView.xib由ParentViewController.m拥有并在其他地方创建。我们在XCode中双击ParentView.xib以启动Interface Builder。然后,我们从“库视图”中拖动“对象”(我相信,如果默认情况下未打开,则使用Cmd + Shift + L打开库视图)到“文档”窗口。 (这是由Cmd + 0激活的窗口。)
“对象”是在库中找到的任意窗口小部件(由纯金立方体图标标识),可以表示项目中的任何内容。在我们将新对象放入文档窗口后,我们键入Cmd + 4以打开Indentity Inspector窗口。在顶部文本字段中,我们可以键入视图控制器参数的名称“MyViewControllerParameter”。接下来,我们在库中找到ViewController小部件并将其放入文档窗口。我们打开属性检查器(Cmd + 1)并将笔尖名称设置为“MyView.xib”。这应该导致CocoaTouch使用“MyView.xib”中的定义加载MyViewController。
打开身份检查器并将class属性设置为MyViewController。最后我们右键单击或控制单击(或两个手指点击,如果我们在MacbookPro上正确配置了触控板)文档窗口中的MyViewController。这将打开一个窗口,显示MyViewController中的所有IBOutlet。从MyViewControllerParameter出口旁边的小空心圆圈拖出一条线,并将其放在位于文档窗口中的MyViewControllerParameter对象上。连接这些点是使用界面构建器在对象之间设置参数的方法。