Iphone 如何使用Xcode 4将.xib文件链接到类文件

Iphone 如何使用Xcode 4将.xib文件链接到类文件,iphone,ipad,xcode4,xib,Iphone,Ipad,Xcode4,Xib,已经在新的Xcode4下启动了一个通用项目。我的应用程序在iPhone和iPad设备上都能运行,但在iPad上设计得不好。我有2.xib文件用于主窗口:MainWindow.xib(iPhone设备)和MainWindow-Ipad.xib(Ipad设备)。但我的MainView只有一个.xib文件:MainView.xib 因此,我试图为iPad设备创建一个特定的.xib文件: 新建文件>用户界面>查看->下一步->设备系列:iPad->MainView-iPad.xib->保存 当然,没有任

已经在新的Xcode4下启动了一个通用项目。我的应用程序在iPhone和iPad设备上都能运行,但在iPad上设计得不好。我有2.xib文件用于主窗口:MainWindow.xib(iPhone设备)和MainWindow-Ipad.xib(Ipad设备)。但我的MainView只有一个.xib文件:MainView.xib

因此,我试图为iPad设备创建一个特定的.xib文件:

新建文件>用户界面>查看->下一步->设备系列:iPad->MainView-iPad.xib->保存

当然,没有任何连接,没有引用出口,没有指向任何类的链接

我检查了新MainView-iPad.xib的每个缩略图,以便将其链接到我的MainViewController类,但没有成功

在哪里或如何将其链接到我的MainViewController类?
提前感谢。

您想创建一个新的UIViewController子类,而不是一个新的UI文件。这将创建.xib以及类文件(.m和.h)。模板在Cocoa Touch下


想要链接到现有的视图控制器可能不是一个好主意。如果遵循MVC(模型-视图-控制器)设计模式,则数据类和视图控制器是分开的。如果可以,请将内容移出MainViewController类,并移到它拥有的数据类中。然后为iPad创建另一个视图控制器,并使其拥有您创建的数据类的实例。

对于通用应用程序,控制器类与.xib的比例为2:1并不一定不正确。以下是我遵循的模式:

您拥有MainViewController类。您有2.xib文件:MainView-iPhone.xib和MainView-iPad.xib。这两个文件的“文件所有者”出口都设置为MainViewController。现在,为了确保view controller实际加载了正确的界面,并根据应用程序运行的设备连接了所有正确的插座,我将执行以下操作:

MainViewController* controller = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    controller = [[MainViewController alloc]initWithNibName:@"MainView-iPad" bundle:[NSBundle mainBundle]];
} else {
    controller = [[MainViewController alloc] initWithNibName:@"MainView-iPhone" bundle:[NSBundle mainBundle]];
}
/* Present the controller */
现在,我还应该说,如果在不同的设备上运行时不需要遵循太多不同的代码路径,那么这才是一个好主意。如果在iPad和iPhone上运行时控制器的行为更专业,那么最好在MainViewController中抽象常见行为,然后编写两个子类:MainViewController_iPhone和MainViewController_iPad。然后,每个子类加载相应的.xib文件,并在内部处理所有细节。在这种情况下,上述代码看起来更像:

MainViewController* controller = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    controller = [[MainViewController_iPad alloc] init];
} else {
    controller = [[MainViewController_iPhone alloc] init];
}
/* Present the controller */

用户763308给出了正确答案:

要将.xib链接到Xcode4下的类,请执行以下操作:

  • 打开你的.xib
  • 在占位符中:选择文件的所有者
  • 在右侧面板的第三个缩略图:“Identity Inspector”中,编辑“Custom Class”字段并输入类的名称
  • 我还必须:

  • 单击“对象”下的根视图
  • 单击最后一个选项卡:“显示连接”
  • 将“新建引用出口”拖动到“文件所有者”并选择“查看”

  • 要将.xib链接到类文件,可以执行以下步骤:-

    1) 转到右侧视图。 2) 点击第三个按钮,你会看到一行询问关于定制的信息 你只需写下你想要链接的类文件的名称

    要创建参考插座,请执行以下操作:-


    1) 您可以从iPhone.xib复制所有插座并粘贴到此处,然后将所有插座拖到文件所有者处,然后将其连接。

    谢谢您的回复。当然,我试图遵循MVC模型,但对我来说,.xib文件代表MVC模型的“视图”(可能我完全错了)。我看不出一个控制器有两个视图有什么不对。如果我必须为每个视图创建一个控制器,每次我在一个控制器中进行更改时,我必须在另一个控制器中复制它?在所有情况下,要将.xib链接到Xcode4下的类:*在占位符中打开你的.xib*:在右面板的第三个缩略图中选择文件的所有者*“自定义类”部分:选择类文件我很确定你通常会为每个UIViewController子类创建一个.xib。这是上面的苹果文档:这似乎正是你必须要做的,而且我过去也让它为我工作过,但是,当我试图将.xib反向插入到项目中时,如果这种方法偶尔不起作用,并且.h/.m类仍然没有连接到.xibIt,那么我就很难知道该怎么做。xibIt不会自动更正到我需要在步骤3中添加的类。尝试清理构建。你说的“单击对象下的根视图”是什么意思?好的-我现在知道了。您的意思是单击左侧的视图方框,它位于“文件所有者”图标/框和“第一响应者”框/图标下。然后单击右侧dock中名为“显示连接检查器”的最后一个选项卡。谢谢-对我不起作用:(…但是汤姆下面的回答就足够了!