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 中创建新的“空应用程序”时没有 .xib 文件