这个iPhone Interface Builder教程中缺少的步骤/信息是什么?

时间:2009-09-15 01:25:33

标签: iphone objective-c xcode interface-builder

我正在关注如何使用Zdziarsky的“iPhone SDK应用程序开发”第2章中的Interface Builder教程。这个想法似乎是创建一个非常基本的应用程序,它包含一个标签栏控制器,它有两个按钮,每个按钮绑定到一个不同的视图对象(以及每个视图对象在各自的.xib文件中)。我最终得到的是一个空白窗口和一些代码,这些代码与本书所指出的内容有很大不同。

我怀疑是一个缺失的步骤,但是指示的步骤分散在解释的一章中,所以我不是100%确定我没有错过任何东西。以下是步骤的总结:

  1. 创建一个名为“Example。”的新“基于窗口的应用程序”。
  2. 在Interface Builder中打开MainWindow.xib并执行以下操作: a)在文档窗口中选择“窗口”图标,打开检查器,设置各种无关属性。 b)将“标签栏控制器”拖到文档窗口中。 c)将两个选项卡名称编辑为“最近”和“历史记录”。 d)保存MainWindow.xib
  3. 创建一个新的“Cocoa Touch View”IB模板。添加“表格视图”。将其另存为Recents.xib。
  4. 同样,创建另一个“Cocoa Touch View”IB模板。添加“文本视图”,另存为History.xib。
  5. 返回MainWindow.xib,编辑检查器中选项卡栏控制器中的每个选项卡,以便“笔尖名称”对应于在步骤3(对于最近)和步骤4(对于创建者)创建的相应.xib文件历史)。
  6. 将Recents.xib和History.xib添加到项目“Example。”
  7. 此时,本书说如果我查看ExampleAppDelegate.h,我应该在代码中看到Interface Builder对象的链接,例如:

    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet RootViewController *viewController;
    

    但是当我实际查看文件时,我只看到上面的第一行(UIWindow)。 RootViewController行不存在。

    同样,本书说当我查看ExampleAppDelegate.m时,我应该看到一些综合指令:

    @synthesize window;
    @synthesize viewController;
    

    但是,我只看到与窗口相关的线条。

    果然,如果我点击“Build and Go”,我在模拟器中看到的是一个空窗口。

    在完成此过程时我注意到的一件事是,我没有被指示将Tab Bar Controller从步骤2b直接拖动到界面构建器中显示的Window对象中。无论如何我试图这样做,发现我不被允许(事实上,任何类型的视图控制器似乎都没有直接在窗口中受欢迎)。这对我来说似乎很奇怪 - 我注意到直接将View对象拖到Window中似乎没问题。但由于视图不能包含视图控制器,我无法看到你应该如何在窗口中包含的层次结构中添加视图控制器。

    我在这里缺少哪些步骤和/或知识?

2 个答案:

答案 0 :(得分:1)

窗口 viewController 出口作为项目模板的一部分添加,因此XCode的模板可能在编写教程时发生了变化。 XCode现在有标签栏,导航和基于视图的应用程序的单独模板,所以你应该看一下。

使用基于Window的普通应用模板,您需要在AppDelegate头文件中添加rootViewController插座,并将其连接到IB中的视图控制器实例。您的应用代表还需要代码将主视图添加到窗口中:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:rootViewController.view]; 
}

这就是您的主视图控制器与应用程序窗口的关系。没有该代码,您将只看到一个空窗口。

答案 1 :(得分:0)

如果它不存在,那就把它写进来 - 它没有任何魔力。但是,如果你想让IB自动跟上这个,我相信你缺少的步骤是文件 - >写类文件;虽然合并时有点不清楚,但我会尝试理解应该在哪里,而不是完全依赖它。