猿问

如何使用Interface Builder创建的nib文件加载UIView

如何使用Interface Builder创建的nib文件加载UIView

我正在尝试做一些精心设计的事情,但这应该是可行的。所以这里对你所有的专家都是一个挑战(这个论坛是你们很多人的一部分:))。

我正在创建一个问卷“组件”,我想在NavigationContoller(我的QuestionManagerViewController)上加载。“组件”是“空” UIViewController,可以根据需要回答的问题加载不同的视图。

我这样做的方式是:

  1. 创建Question1View对象作为UIView子类,定义一些IBOutlets

  2. 创建(使用Interface Builder)Question1View.xib (这里可能是我的问题所在)。我同时设置UIViewControllerUIView为类Question1View的。

  3. 我将出口与视图的组件链接(使用IB)。

  4. 我重写initWithNibQuestionManagerViewController的看起来像这样:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        if (self = [super initWithNibName:@"Question1View" bundle:nibBundleOrNil]) {
            // Custom initialization
        }
        return self;}

当我运行代码时,我收到此错误:

2009-05-14 15:05:37.152 iMobiDines [17148:20b] ***因未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' -[UIViewController _loadViewFromNibNamed:bundle:]加载了'Question1View“笔尖,但未设置视图插座。”

我确信有一种方法可以使用nib文件加载视图,而无需创建viewController类。


暮色呼如
浏览 430回答 3
3回答

蓝山帝景

还有一种更简单的方法来访问视图,而不是将nib作为数组处理。1)创建一个自定义View子类,其中包含您希望以后可以访问的任何出口。 - 我的看法2)在你想要加载和处理nib的UIViewController中,创建一个IBOutlet属性来保存加载的nib的视图,例如在MyViewController中(一个UIViewController子类)  @property (nonatomic, retain) IBOutlet UIView *myViewFromNib;(别忘了合成它并在你的.m文件中发布它)3)在IB中打开你的笔尖(我们称之为'myViewNib.xib'),将你文件的所有者设置为MyViewController4)现在将文件的所有者插座myViewFromNib连接到笔尖中的主视图。5)现在在MyViewController中,写下以下行:[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil];现在,只要您这样做,调用您的属性“self.myViewFromNib”将允许您从笔尖访问视图!

茅侃侃

谢谢你们。我确实找到了一种方法来做我想做的事。UIView用IBOutlet你需要的东西创造你的。在IB中创建xib,根据自己的喜好设计它并将其链接如下:文件的所有者属于类UIViewController(没有自定义子类,但是“真正的”子类)。文件所有者的视图连接到主视图,其类声明为步骤1)中的类。将控件与IBOutlets 连接。在DynamicViewController可以运行它的逻辑来决定哪些视图/厦门国际银行加载。一旦它做出了决定,在loadView方法中放了这样的东西:NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"QPickOneView"                                                   owner:self                                                 options:nil];QPickOneView* myView = [ nibViews objectAtIndex: 1];myView.question = question;而已!主bundle的loadNibNamed方法将负责初始化视图和创建连接。现在,ViewController可以根据内存中的数据显示一个或另一个视图,而“父”屏幕不需要打扰这个逻辑。
随时随地看视频慕课网APP

相关分类

iOS
我要回答