适用于 ipad 和 iphone 的 MainWindow.xib

Posted

技术标签:

【中文标题】适用于 ipad 和 iphone 的 MainWindow.xib【英文标题】:MainWindow.xib for ipad and iphone 【发布时间】:2013-01-15 15:57:06 【问题描述】:

我正在尝试build on this demo,其中包含 MainWindow.xib 和 ImageManipViewController.xib 。但是我的应用程序在 AppDelegate.m 中包含以下代码,并且我的应用程序不(还没有?)包含 MainWindow.xib。添加2个MainWindow.xib文件(一个用于iPhone,一个用于iPad)对我来说更好/最好(在我的方法中调用,每个都调用自己的xib文件)还是MainWindow.xibs只是额外的?

(顺便说一句,如果答案是 MainWindow.xibs 是多余的,那么你能说为什么它可能会在原始演示中使用吗?这可能只是作者简化步骤的结果例如,创建演示?)我还没有找到直接联系作者的方法。

如果有更好的方法来开发“通用”应用程序,请告诉我。

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

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
        self.viewController = [[BSViewController alloc] initWithNibName:@"BSViewController_iPhone" bundle:nil];
     else 
        self.viewController = [[BSViewController alloc] initWithNibName:@"BSViewController_iPad" bundle:nil];
    
    self.window.rootViewController = self.viewController;

【问题讨论】:

【参考方案1】:

您可以通过编程或使用 Xib 文件来构建主窗口及其附加的子视图(甚至视图控制器)。结果是一样的,但小型演示项目通常使用 Xib 文件,以简化代码并专注于他们想要向您展示的部分。

两个 Xib,一个用于 iPad,一个用于 iPhone 非常好,因为鼓励 iPad 应用程序使用可充分利用 iPad 大屏幕的视图;因此,建议将它们作为单独的文件保存。不过,您的模型和控制器应该是 iPad 和 iPhone 通用的。

关于加载 Xib,如果您的项目针对 ios 4.0 或更高版本,您可以将您的 xib 文件命名为“BSViewController~iphone.xib”和“BSViewController~ipad.xib”,并避免代码中出现一些条件:

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

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[BSViewController alloc] initWithNibName:@"BSViewController" bundle:nil];
    self.window.rootViewController = self.viewController;

【讨论】:

这是避免条件语句的好方法。所以你是说两个“主”窗口是两个视图控制器,不需要甚至不需要(中间)“主”窗口?我问是因为在演示中,MainWindow 似乎真的被使用并连接到 viewController xib。 也许我在问是否需要一个窗口,或者 viewController 是否可以自主存在(即单独存在)或者那行 self.window ... 是否暗示真的有一个 Window.xib 呢? @zerowords 每个应用程序都必须有一个主窗口。它将使用正确的设备屏幕尺寸从 Xib 文件中实例化。 self.window 和 MainWindow.xib 的关系由 ImageManipAppDelegate.h 中的 outlet 表示 我认为您的回答和评论意味着在我的情况下不需要或什至不需要 mainWindow 的物理 xib,因为两个 viewController xib 以及 AppDelegate.h 文件中的插座指定就是全部我需要。 I am trying to find why my app is not working and am fishing for problems. 我迷路了。我尝试(重新)命名我的 xib 文件“BSViewController~iphone.xib”和“BSViewController~ipad.xib”,但 Xcode 终止,当我重新启动时,ipad.xib 显示为灰色,我无法恢复。我所做的一切要么无法编译,要么给出我无法理解的错误。在 AppDelegate.h 中,我有 @property (retain, nonatomic) IBOutlet UIWindow *window;@property (retain, nonatomic) IBOutlet BSViewController *viewController; 在导航器中,我的文件名为 BSViewController~iPad.xib 但在 xib 中拖动不会将任何内容连接到文件的所有者。请帮忙

以上是关于适用于 ipad 和 iphone 的 MainWindow.xib的主要内容,如果未能解决你的问题,请参考以下文章

更改iPhone和iPad上的备用图标(适用于iPhone和iPad的setAlternateIconname)

适用于 iPhone 和 iPad 的 Xcode 故事板和 xib

screenShot代码不适用于ipad,适用于iphone

如何支持适用于 iPhone、iPad 和 iPad Mini 的 iOS 应用程序

适用于 ipad 和 iphone 的 MainWindow.xib

适用于 iPhone 和 iPad 的 iOS 分辨率