xcode我想在启动时更改第一个xib

Posted

技术标签:

【中文标题】xcode我想在启动时更改第一个xib【英文标题】:xcode I want to change the first xib on launch 【发布时间】:2013-05-16 07:04:15 【问题描述】:

我创建了一个 iPhone 应用程序,然后我必须将其转换为 iPad 应用程序。现在,我添加了一个新的 Objective-C 类,其中包括 XIB、.M 和 .H 文件。我希望新的 XIB 文件在启动时显示。

我新创建的文件名为 PhotoViewController。如果我选择要启动的文件,模拟器会显示黑屏。如果我选择 MainWindow-iPad 文件,我会看到 Hello_SOAPViewController 文件已启动。这很奇怪。

我该如何解决这个烂摊子?我希望 PhotoViewController 在启动时启动。

请看下面的图片。您可以看到我的项目文件和项目设置屏幕。

【问题讨论】:

设置 self.window.rootViewController = PhotoViewController;在 appDelegate 中的 didFinishLaunchingWithOptions 方法中。 查看错误信息。根视图控制器设置不正确,无论出于何种原因。正如 Girish 所说,您可以在 appDelegate 中的 didFinishWithLaunching 中以编程方式修复该问题。 请把评论放在回答@Girish @AhmedZ。我在答案中添加了代码。谢谢... 【参考方案1】:

将应用转换为通用后:-

您创建了两个具有相同自定义类的不同XIB。如下图:-

iphone->xib-选择文件所有者

现在为 Ipad ite 名称 PhotoViewController_ipad 创建新的 xib。现在只需打开它新创建的XIB-->单击文件所有者--->看起来像:-

其右侧的自定义类空白放在那里 PhotoviewCintroller

并将文件所有者连接到 View

现在你有两个 Xib,一个用于 Iphone,另一个用于 Ipad,现在你可以通过使用如下编码方式来实现这一点:-

在 Delegate.m 文件中加载应用程序时,您需要检查它的 Iphone 或 Ipad:-

#define isiPhone (UI_USER_INTERFACE_IDIOM() == 0)?TRUE:FALSE

yourApplicationAppDelegate.h 类

#import <UIKit/UIKit.h>

@class PhotoViewController;

@interface yourApplicationAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) PhotoViewController *viewController;

@end

yourApplicationAppDelegate.m 类

#import "yourApplicationAppDelegate.h"

#import "PhotoViewController.h"
#define isiPhone  (UI_USER_INTERFACE_IDIOM() == 0)?TRUE:FALSE 
#define isiPhone5  ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE

@implementation yourApplicationAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.


        if (isiPhone) 

            if (isiPhone5) 
                
                    self.viewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController_iphone5" bundle:nil];     
                
                else
                
                    self.viewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController_iphone" bundle:nil];
                

        else
             self.viewController = [[PhotoViewController alloc] initWithNibName:@"PhotoViewController_ipad" bundle:nil];

        



        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    

编辑 另一种想法是,如果您还为 iphone5 编码,那么您也可以检查 #define isiPhone5 ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE 我编辑了我的答案

【讨论】:

yourApplication Appdelegare.m didFinishLaunchingWithOptions 方法,正如我在回答中提到的那样 同样的事情发生了。出现黑屏 请不要从 ipad 开发窗口中选择任何主窗口。被认为是一个空白那里的选择。看到你必须有两个不同的 Xib 具有相同的类一个是用于 Ipad,另一个是用于具有相同类的 iphone 谢谢。真的很有帮助【参考方案2】:

1) 在appDelegate 文件中分配didFinishLaunchingWithOptions 方法中的PhotoViewController

2) 设置self.window.rootViewController = PhotoViewController;

【讨论】:

只有 self.window.rootViewController = PhotoViewController;还不够,他们必须检查第一个设备是 Iphone 还是 Ipad。那么他们必须设置ipad或iphone的相关笔尖。 @NitinGohel 我没有考虑设备。

以上是关于xcode我想在启动时更改第一个xib的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:无法更改主笔尖文件

更改 Xcode 中的默认 Xib 文件

打开另一个文件时Xcode更改我的xib

在 XCode 中创建新的“空应用程序”时没有 .xib 文件

如何从我的 XCODE 上的另一个选项卡更改 UILabel 值

Xcode 4 错误:启动可执行文件时出错