【问题标题】:How to create an iOS project with a XIB in Xcode 6?如何在 Xcode 6 中使用 XIB 创建 iOS 项目?
【发布时间】:2014-08-15 12:26:21
【问题描述】:

我正在尝试使用 Xcode 6 Beta 5 使用没有情节提要的 Objective-C 语言创建一个项目。我已经尝试创建了一个空项目,但它不能作为 Xcode 5 工作。

我已阅读此主题How to create project without story board in Xcode 6 - Swift,但对我没有帮助。

【问题讨论】:

  • 我的印象是,Apple 正在引导开发人员使用 Interface Builder 从 XIB 迁移到 Storyboard(特别是通过删除该选项并默认构建它们)。我找不到任何具体的证据,但在 Xcode 6 中创建新项目似乎只能产生基于 Storyboard 的项目。

标签: ios objective-c


【解决方案1】:

你是什么意思它不像 Xcode 5 那样工作?您可以创建没有情节提要的空项目,然后像在 Xcode 5 中一样使用 XIB 添加您自己的类: 文件 -> 新建 -> 文件 -> Cocoa Touch Class -> 将“子类:”设置为(例如)UIViewController 并选中“同时创建 XIB 文件”。

【讨论】:

  • 我的意思是,通常当你在 Xcode 5 中创建一个项目时,你会得到一个应用程序委托,而我无法在 Xcode 6 的空项目中得到它。我做了和你写的一样的事情,但是我无法运行这个项目。
  • 你应该得到一个应用委托。你能提供你的项目的截图吗?你的主要功能是什么?您确定要从“应用程序”选项卡创建“空应用程序”项目,而不仅仅是从“其他”选项卡创建“空”项目吗?看起来这就是你所做的。顺便说一句,在 Xcode 5 中是一样的
  • 我无法提供图片,因为我的声誉低于 20。首先我点击创建一个新的 Xcode 项目 > iOS(从左起)> 空图标(从右起)> 产品名称“”。在“应用程序”选项卡中没有Empty Application,而在 Xcode 5 中有。您可以检查...
  • 检查了,我有这个模板。但我发现 Apple 在 beta 3 中删除了这个模板,我仍在使用 beta 2。所以看起来 Apple 强迫你使用故事板。然后你有2个选择,我猜:1.用故事板创建项目,然后删除故事板和相关代码。 2.将“空应用程序”模板从以前的测试版复制到模板文件夹:{Xcode.app}/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application/
  • 感谢 Alexander 的回复,我想从现在开始我将使用 Storyboard :(
【解决方案2】:

您首先创建一个新的“单一视图”项目。这从 Storyboard 开始,但由于 Xcode 6 已经删除了创建空项目的选项,我们将从这里开始使用它。

然后您为此项目创建一个新文件,进入“用户界面”类别并选择“查看”。我会将它命名为与原始 ViewController 相同的名称,因为它将替换我们即将从项目中删除的情节提要。

创建 XIB 后,您需要选择它并将“文件所有者”设置为指向您希望此 XIB 链接的“ViewController”类。这是通过进入 Xib 文件所有者的身份检查器,并将 NSObject 的默认值更改为视图控制器的类名来完成的。

完成此操作后,您需要转到 Connections Inspector 以将 File's Owner 的视图链接到 XIB 的视图。只需单击“视图”对面的小圆圈并将其拖到您的视图以连接它。然后,您应该在视图和视图之间建立连接。

现在是重要部分。进入您的项目目标,在“常规”选项卡下。有一个名为“部署信息”的小节。在该小节中有一个“主界面”字段。此字段应显示情节提要的名称。您需要删除该字段中显示的值,以便主界面留空。

然后进入 App Delegate 并设置窗口的根视图控制器,就像之前的 Xcode 版本一样。完成后,您应该有一个使用您的 XIB 正在运行的应用程序,并且您可以从项目中删除您的故事板而不会产生任何不利影响。

【讨论】:

  • 谢谢你,你救了我的命。要设置根视图控制器,请添加: self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 创建一个你想首先显示的视图控制器的实例 UIViewController *homeViewController = [[UIViewController alloc] initWithNibName:@"CreatedViewController" bundle:nil]; // 将其设置为应用程序窗口的根视图控制器 [self.window setRootViewController:homeViewController]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible];
【解决方案3】:

我不知道为什么人们拒绝投票,因为这是一个合理的问题,所以你需要做的是:

创建一个空项目,创建一个新的视图控制器(文件/新建/文件) - 如果需要,使用 XIB 文件,将新的视图控制器导入您的 AppDelegate,并将此视图控制器设置为根视图控制器。

AppDelegate.m:

#import "AppDelegate.h"

// import the view controller you want to be displayed first
#import "FirstViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // create an instance of the view controller you want to be displayed first
    FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    // set it as the root view controller of the application's window
    [self.window setRootViewController:firstViewController];

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

当然,现在,如果您想创建一个标签栏或导航控制器,您的做法会有所不同,但这对您来说应该是一个很好的起点。

【讨论】:

  • 谢谢尼克,我跟着你的方式,但在 Xcode 6 中我没有得到 AppDelegate,因为你在 Xcode 5 中创建了一个空项目。
  • 每个应用程序都会有一个 AppDelegate,无论您在创建它时选择哪种模板类型。如果在创建项目时添加了一个类前缀,那么它将被命名为 XXAppDelegate。我猜这与我尚未积极使用的 Xcode 6 不同。
【解决方案4】:

AppDelegate.h

UINavigationController *nav;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    ViewController *ll=[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
    nav=[[UINavigationController alloc]initWithRootViewController:ll];
    [self.window setRootViewController:nav];
    [nav setNavigationBarHidden:YES];
    return YES;
}

【讨论】:

    【解决方案5】:

    很简单:

    • 创建空应用项目
    • 添加到这个项目新文件 -> Objective-C 类(带有 .xib 文件)。我的班级被命名为“ViewController”:) 现在您必须在 AppDelegate.h 中创建 UINavigationController 例如:

      @property (strong, nonatomic) UINavigationController *navController;

    你必须在

    中设置你的导航控制器
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        [self.window makeKeyAndVisible];
    
        ViewController* homeViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        _navController = [[UINavigationController alloc] initWithRootViewController:homeViewController];
    
        self.navController.navigationBarHidden = YES;
        self.window.rootViewController = self.navController;
    
        return YES;
    }
    

    就是这样。

    【讨论】:

    • 谢谢我做了同样的事情添加到这个项目新文件-> Objective-C 类(带有 .xib 文件)。我的课程名为“ViewController”,但我无法运行该项目。我得到我的RUN 按钮是空的,没有在 iPhone 上设置。
    • 但是当我使用情节提要创建一个普通项目时,我得到了RUN 按钮并且它可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2015-02-20
    • 2015-07-24
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多