0

我正在尝试了解“基于经典 nib”和“基于故事板”的 iPhone 开发工作流程之间的区别,以及它们各自的编码风格和方法。

因此,我在 XCode 4.5 中创建了一个新的空 iPhone 应用程序,使用 iOS -> Application -> SingleView Application 作为我的模板。我希望了解如何将其转换为以标签栏控制器作为根控制器和我的应用程序的根视图的应用程序。

我删除了 iPhone 笔尖中的空根视图,并尝试用 TabBarController 的视图替换该视图:

在此处输入图像描述

在运行时,我得到这个异常并且应用程序中止:

"A view can only be associated with at most one view controller at a time"

很明显,我在这里违反了一条规则,并且不允许将 TabBarController 与 View 关联,然后使该 View 也成为 File's Owner 连接指向的视图。那么执行此操作的正常惯用方法是什么?把原来的空视图留在原地,然后在运行时让tabbarcontroller视图变成一个子视图?还是其他什么技术?

注意:我不是要求选择不同的模板,也不是如果这种方式涉及故事板,如何最容易地做到这一点。我在问如何做到这一点,没有故事板,只有经典的笔尖,我想了解笔尖实例化的“股票 ui 选项卡控制器”对象如何工作。

更新:我可以通过摆脱默认的模板生成单视图模板的视图控制器对象来摆脱错误。现在我有一个应用程序,它链接和运行一个黑色的空窗口,没有可见的根视图。我尝试使用 Interface Builder 将 IUTabBarController 连接到应用程序委托的属性:

@property (strong, nonatomic )IBOutlet UIViewController *viewController; // I added IBOutlet

在我的应用委托中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _window.rootViewController = _viewController;
}

然后我将该插座连接到 nib 实例化的 UITabBarController 对象:

在此处输入图像描述

在我看来,这应该奏效。我可以运行,但我没有根视图。

4

1 回答 1

0

标题中的问题很容易回答;为基于选项卡的用户界面选择 iOS 模板,然后取消选中“使用情节提要”。

然而,上面的基本问题,我试图在这里自我回答的是,如果我取消选中“使用故事板”并选择“选项卡式用户界面”,新用户需要了解 XCode 将生成的样板代码,使用模板我应该使用的,足够我自己写的。

我的问题是我不了解视图控制器类的关系以及它们是如何实例化的,并且我忽略了 appcontroller.m 文件中的样板代码。我把它放在我面前,但我没有看到它。

  1. 为每个页面创建一个视图控制器类。

  2. Apple 演示不直接使用 UITabBarController 子视图,它们在运行时将它的父级放到一个空白的 nib 视图上:

     [self.window addSubview:self.tabs.view];
    

当然,苹果样本来自 iOS 4.0 时代。

优秀的示例代码,用于参考使用标签栏控制器作为根 UI 小部件的简单应用程序:Apple 的简单 FTP 示例,但它不是一个完美的示例,因为苹果示例为标签栏控制器中的每个页面使用不同的 nib,并且需要更多样板代码,因为它来自 iOS 3.0 时代。

然而,这个答案并不完美,因为它没有回答“使用当前框架,iOS 6.0/6.1 时代的原生和预期习语是什么”这个问题。

于 2013-01-29T15:02:25.430 回答