使用 UIViewController 加载 nib 文件

Posted

技术标签:

【中文标题】使用 UIViewController 加载 nib 文件【英文标题】:Use a UIViewController to load a nib file 【发布时间】:2011-11-24 01:02:08 【问题描述】:

我使用“创建基于窗口的应用程序”选项在 Xcode 3.x 中启动了一个项目。该项目似乎从 info.plist 条目中自行加载主 nib 文件:“Main nib file base name”。

现在我希望使用 UIViewController 加载主 nib 文件。我可以删除 info.plist 条目并使用视图控制器以编程方式在“应用程序:didFinishLaunchingWithOptions:”中加载 nib 文件吗?

(现在项目已经转移到 Xcode 4.2。但我想编译器版本对于这种情况应该没有多大关系......)

希望这方面的知识渊博的人可以提供帮助......

【问题讨论】:

【参考方案1】:

如果您要升级同一个项目,那么不,您不能这样做。

Apple 在其模板中用于进入应用程序的机制在这些版本之间发生了变化。

在 3.x 中,Main Interface 在您的项目设置中设置为 MainWindow.xib。在这个xib 中,您的应用程序委托被加载为一个对象。

在 4.x 中,main.m 专门使用以下行加载应用程序委托:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

这是在 3.x 和 4.x 之间更改的最后一个参数

最好的办法是创建一个新项目,看看模板代码是如何将它们全部连接起来的。

更新

首先,如果您的项目正在运行,您真的需要更改它吗?

如果是这样,那么我正在使用新项目中的模板代码

转到您的 main.m 并更改实现

int main(int argc, char *argv[]) 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;

int main(int argc, char *argv[])

    @autoreleasepool 
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    

注意AppDelegate 更改为您的应用委托类的名称。

您还需要更新您的应用委托以编程方式创建UIWindow

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

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Instantiate your rootViewController

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

这些是我能想到的最明显的区别,可能还有一些其他的字幕但是我很久没用过 3.x 我记不得了。

【讨论】:

感谢您的回答。太糟糕了,“Lion”不能再运行 3.x。您能否详细说明“模板代码如何连接”的含义? 感谢您的详细解释。很遗憾没有在早期使用根视图控制器。我不知道视图控制器的重要性,因为我不熟悉可可编码模式。我只希望有一个有效的视图控制器来翻转视图。也许我应该想办法在没有控制器的情况下做到这一点。 一个警告 rootViewControllerios 4 中被添加到 UIWindow 所以如果你想支持旧的那么你应该添加你的视图控制器旧的方式例如[self.window addSubView:yourViewController.view];

以上是关于使用 UIViewController 加载 nib 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MainStoryBoard 加载和更改 UIViewController [IOS]

关闭 UIViewController 后如何重新加载 tableView

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

UIViewController _loadViewFromNibNamed:bundle 加载了“XXXViewController”笔尖,但未设置视图出口。 -*使用故事板*

如何从情节提要以编程方式加载 UIViewController?

UIViewController 子类支持NIB加载和非