Objective-C:分类

时间:2011-09-16 00:46:48

标签: objective-c class

让我假装我有以下三个文件:

  • MainViewController.h
  • MainViewController.m
  • MainViewController.xib

MainViewController.xib会在屏幕上显示许多不同的信息,例如按钮,标签和图片。

我们还假装我也有这三个文件:

  • DisplayController.h
  • DisplayController.m
  • DisplayController.xib

是否可以在MainViewController.m内调用DisplayController.m中能够更改MainViewController.xib上显示内容的方法?

所以,如果我想要一个将图像绘制到MainViewController.xib的单独类,以及一个将按钮绘制到MainViewController.xib的单独类,我该怎么做?我想在MainViewControllerDisplayController之间需要建立某种链接,以便DisplayController能够操纵MainViewController中找到的属性。

非常感谢任何帮助!

2 个答案:

答案 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。