为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
暮色呼如 2019-07-31 14:27:08
如何使用Interface Builder创建的nib文件加载UIView我正在尝试做一些精心设计的事情,但这应该是可行的。所以这里对你所有的专家都是一个挑战(这个论坛是你们很多人的一部分:))。我正在创建一个问卷“组件”,我想在NavigationContoller(我的QuestionManagerViewController)上加载。“组件”是“空” UIViewController,可以根据需要回答的问题加载不同的视图。我这样做的方式是:创建Question1View对象作为UIView子类,定义一些IBOutlets。创建(使用Interface Builder)Question1View.xib (这里可能是我的问题所在)。我同时设置UIViewController和UIView为类Question1View的。我将出口与视图的组件链接(使用IB)。我重写initWithNib我QuestionManagerViewController的看起来像这样:- (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类。
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

还有一种更简单的方法来访问视图,而不是将nib作为数组处理。

1)创建一个自定义View子类,其中包含您希望以后可以访问的任何出口。 - 我的看法

2)在你想要加载和处理nib的UIViewController中,创建一个IBOutlet属性来保存加载的nib的视图,例如

在MyViewController中(一个UIViewController子类)

  @property (nonatomic, retain) IBOutlet UIView *myViewFromNib;

(别忘了合成它并在你的.m文件中发布它)

3)在IB中打开你的笔尖(我们称之为'myViewNib.xib'),将你文件的所有者设置为MyViewController

4)现在将文件的所有者插座myViewFromNib连接到笔尖中的主视图。

5)现在在MyViewController中,写下以下行:

[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil];

现在,只要您这样做,调用您的属性“self.myViewFromNib”将允许您从笔尖访问视图!


查看完整回答
反对 回复 2019-07-31
?
茅侃侃

TA贡献1842条经验 获得超21个赞

谢谢你们。我确实找到了一种方法来做我想做的事。

  1. UIViewIBOutlet你需要的东西创造你的。

  2. 在IB中创建xib,根据自己的喜好设计它并将其链接如下:文件的所有者属于类UIViewController(没有自定义子类,但是“真正的”子类)。文件所有者的视图连接到主视图,其类声明为步骤1)中的类。

  3. 将控件与IBOutlets 连接。

  4. DynamicViewController可以运行它的逻辑来决定哪些视图/厦门国际银行加载。一旦它做出了决定,在loadView方法中放了这样的东西:

    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"QPickOneView"
                                                      owner:self
                                                    options:nil];QPickOneView* myView = [ nibViews objectAtIndex: 1];myView.question = question;

而已!

主bundle的loadNibNamed方法将负责初始化视图和创建连接。

现在,ViewController可以根据内存中的数据显示一个或另一个视图,而“父”屏幕不需要打扰这个逻辑。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信