让我假装我有以下三个文件:
MainViewController.h
MainViewController.m
MainViewController.xib
MainViewController.xib
会在屏幕上显示许多不同的信息,例如按钮,标签和图片。
我们还假装我也有这三个文件:
DisplayController.h
DisplayController.m
DisplayController.xib
是否可以在MainViewController.m
内调用DisplayController.m
中能够更改MainViewController.xib
上显示内容的方法?
所以,如果我想要一个将图像绘制到MainViewController.xib
的单独类,以及一个将按钮绘制到MainViewController.xib
的单独类,我该怎么做?我想在MainViewController
和DisplayController
之间需要建立某种链接,以便DisplayController
能够操纵MainViewController
中找到的属性。
非常感谢任何帮助!
答案 0 :(得分:1)
首先,您可以随时从任何地方调用静态(即“+”vs“ - ”)方法。这有时是实现不需要访问实例变量的常用方法的最简单/最好的方法。
接下来,如果你有alloc
ed和init
编辑DisplayController
的实例,并且你有一个指向该实例的指针,你可以调用该实例的方法,即使查看它没有显示控件。
你可以,例如,传递给DisplayController
的实例方法,指向你想要以某种方式修改的UIButton
指针(比如更新它的文本),即使{{1} }}不属于UIButton
。代码基本上都是代码,并且这些位并不关心谁设置它们。
您甚至可以将指向DisplayController
的指针分配给UIButton
中的属性,这样您就可以稍后返回并操作它而无需再次传入指针。
你只需要小心,不要忘记你正在处理一个“外来”对象,并且你当前的实例变量(除了它自己的属性之外)与它无关。有一些高度可见的评论解释这一点是明智的。
你可能做不到的事(据我所知)是以某种方式将你的DisplayController直接链接到MainViewController.xib(同时该xib由MainViewController同时链接和/或你的DisplayController实例同时链接到DisplayController.xib)。是的,可能有很多方法可以做到这一点,但它们很脆弱,复杂且容易出错。
答案 1 :(得分:0)
.xib文件只是一个存档,所以,是的,任何类都可以打开并读取该存档。听起来你想看看
- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options
NSBundle类的。这将返回一个填充了顶级视图的数组,您可以通过任何视图的子视图向下浏览视图层次结构,以查找.xib文件中包含的图像,标签或其他内容。
所以,是的,DisplayViewController中的方法可以加载.xib文件并对其执行某些操作,或将其传递给MainViewController。