【问题标题】:Converting an Utility application (2 view controllers) to a Tab bar Application将实用程序应用程序(2 个视图控制器)转换为选项卡栏应用程序
【发布时间】:2011-06-18 18:50:43
【问题描述】:

正如标题所示,我已经构建了一个基于实用程序的应用程序。
该应用程序(目前)由 2 个视图控制器 + 一个模型类层次结构组成。
问题是,因为我想向应用程序添加一些功能,所以我想将其转换为基于 TabBar 的应用程序。

作为第一步,我希望第一个视图成为标签栏的第一个视图,而 FlipSideView 成为其他标签栏项目之一。

此类任务是否有任何“标准程序”/“杂货清单”?
我相信你们中的一些人也遇到过同样的问题,并且希望在为主窗口创建一个新的 nib 文件后获得一些关于“切片”应用程序和“连接它”的建议(这是第一步吗?)

提前致谢。

【问题讨论】:

  • 您能否更具体地说明您希望获得的最终结果是什么?例如将设置屏幕从背面移动到正面的单独选项卡。
  • @Russian ,这正是我最初想要实现的目标。之后我将创建更多选项卡。我编辑了这个问题。谢谢。

标签: iphone ios xcode refactoring uitabbarcontroller


【解决方案1】:

我可能会如下开始(假设您使用的是 Interface Builder 并使用标准的 Xcode 实用程序模板):

  • 编辑 MainWindow.xib 文件并将 Tab Bar Controller 对象拖到视图层次结构的顶层。
  • IB 中默认的标签栏控制器包括两个视图控制器项作为示例。单击第一个并将其类更改为您现有的 Main View Controller 类。
  • 您还可以通过添加 IB 已添加到视图层次结构的关联选项卡栏项来设置主视图控制器项的图标和选项卡栏标题。
  • 对设置 FlipsideViewController 的类的第二个选项卡栏项执行相同操作。
  • 从 NIB 文件中删除旧版本的主视图控制器,并从应用程序委托中删除 IBOutlet 属性(您可能还应该删除在 dealloc 中对主视图控制器的引用)。
  • 在您的 App Delegate 中为 Tab Bar Controller 添加一个 IBOutlet 属性,如下所示(不要忘记合成该属性):

    @property (nonatomic,retain) IBOutlet UITabBarController *tabBarController;

  • 在 IB 中,将 tabBarController 出口从 App 委托对象连接到 Tab Bar Controller 对象。

  • 最后要让标签栏控制器显示在主视图控制器的位置,将 application:didFinishLaunchingWithOptions: 中的代码更改为以下内容:

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

这应该让基本的标签栏应用程序启动并运行,您可以向标签栏添加额外的视图控制器。

由于您不再希望在 MainView 和 FlipsideView 之间切换,您可以从 MainViewController 中删除对 FlipsideViewControllerDelegate 的引用以及信息按钮及其 IBAction 方法 showInfo。同样,在 FlipeSideViewController 中,您应该从视图及其 IBAction 方法中移除完成按钮,因为这些在与标签栏一起使用时不再有意义。

【讨论】:

  • 太棒了。谢谢你 。关于主控制器+反面控制器的分离有什么问题吗?它应该无缝工作,还是应该在两者之间分离委托?
  • 您可能希望删除代理以及主视图上的信息按钮和反面视图上的完成按钮。我相应地更新了答案。
【解决方案2】:

所以,一步一步:): 1. 在您的应用程序委托中声明 UITabController 插座。 2.在MainWindow.xib中:首先将UITabBarController的实例拖到文档窗口中,然后从app delegate连接到该实例。现在您可以将 MainViewController 设置为 UiTabBarController 的第一个选项卡视图控制器,然后将 FlipsideViewController 设置为 UiTabBarController 的第二个选项卡视图控制器。 3.在app delegate的appDidFinishLaunching中替换[self.window addSubview:mainViewController.view];与 [self.window addSubview:theNameOfUITabBarControllerOutlet.view];。这将完成工作。抱歉,我不知道你的背景,这就是为什么我对执行我描述的特定操作不是很具体,所以如果你发现自己陷入困境,请告诉我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多