iphone – 如何使用可由多个ViewControllers使用的关联View类创建Nib

iphone – 如何使用可由多个ViewControllers使用的关联View类创建Nib,第1张

概述我正在打开一个新问题来跟进我的最后一个问题( superview and parentviewcontroller nil after adding a subview).基本上我认为使用子视图是一个好主意,但我不应该有一个ViewController控制住在另一个ViewController内的子视图.基本上我想做以下事情…… 我有两个ViewControllers,它们共享一个共同的子视图.我 我正在打开一个新问题来跟进我的最后一个问题( superview and parentviewcontroller nil after adding a subview).基本上我认为使用子视图是一个好主意,但我不应该有一个VIEwController控制住在另一个VIEwController内的子视图.基本上我想做以下事情……
我有两个VIEwControllers,它们共享一个共同的子视图.我已经将该子视图创建为一个名为SearchDate.xib的笔尖.文件所有者是相应的类SearchDateVIEw.m / h.该类有一个出口,用于nib中UIVIEw内部唯一的元素,它是一个标签. SearchDateVIEw类还具有更改SearchDateVIEw.xib中标签值的功能.我希望我的两个VIEwControllers加载这个笔尖,但显然我不知道如何正确加载笔尖.无论我做什么,最好什么都不显示,最坏的情况是抛出异常.苹果文档谈到将IB中其他类的实例拖入主视图,但这似乎没有成功.我在VIEwController中有一个SearchDateVIEw插座,我尝试在控制器的加载视图上执行此 *** 作:

searchDateVIEw = [[[NSBundle mainBundle] loadNibnamed:@"SearchDateVIEw" owner:self options:nil] objectAtIndex:0];[[self vIEw] addSubvIEw:searchDateVIEw];

但是我得到了这个例外:

*** Terminating app due to uncaught exception 'NSUnkNownKeyException',reason: '[<MainVIEwController 0x431fac0> setValue:forUndefinedKey:]: this class is not key value Coding-compliant for the key searchDateLabel.'

我知道我做了一些完全错误的事情,但是有一个nib,关联的视图类更新该nib中的一些对象,并在不同的控制器中重用该nib的正确方法是什么?

编辑:鉴于评论可能这还不够明确.我不想在整个ENTIRE视图中使用相同的nib文件 – 而是使用子视图.因此,例如,控制器A具有映射和SearchDateVIEw,控制器B具有表视图和SearchDateVIEw.所以我想知道如何将子视图加载到多个控制器中……

解决方法 当使用initWithNibname初始化每个控制器时,使用相同的NIB文件应该没有问题:bundle:.您通常不会从控制器内加载控制器自己的nib文件.

如果使用loadNibnamed :::加载nib文件,则会获得其中定义了对象的NSArray,因此您无法直接将其用作视图.获取视图的一种方法是使用for()或其他东西搜索数组以找到所需的对象,但是如果你设置owner:self,那么它应该连接到连接到file的所有者的出口,因为file的所有者将是self .但是你可以在这种情况下丢弃返回值;你不需要返回的数组.如果您连接了该插座,这可能是您的主要问题(用阵列破坏插座).

可以使用loadNibnamed来加载特定的视图对象(假设你从返回的数组中选择它),然后以某种方式显示它,但通常更容易在控制器上使用initWithNibname(在这种情况下,file的所有者将是控制器) .

哦,您还可以在Interface Builder中为控制器设置nib文件.对于多个控制器使用相同的nib应该没有问题,因为基本上你只是告诉Interface Builder设置nib文件来执行类似initWithNibnamed的 *** 作.单击控制器对象并检查检查器窗口.

更新

我可能这样做是为了在多个控制器中只使用一个视图:

NSArray *nib = [[NSBundle mainBundle] loadNibnamed:@"FooVIEw"                                                  owner:self options:nil];    for (ID obj in nib)        if ([obj isKindOfClass:[FooVIEw class]])            myNewVIEw = (FooVIEw *)obj;

(来自第8章:来自Beginning iPhone 3开发的示例代码中的单元格2).

您可以通过IB中的出口执行此 *** 作,在这种情况下您可以省略for循环,但是您可能需要为两个控制器声明插座的超类,以及告诉Interface Builder file的所有者是该超类的实例的东西所以它知道插座.可能不值得麻烦.

总结

以上是内存溢出为你收集整理的iphone – 如何使用可由多个ViewControllers使用的关联View类创建Nib全部内容,希望文章能够帮你解决iphone – 如何使用可由多个ViewControllers使用的关联View类创建Nib所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1009984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存