一个带有多个"文件所有者"的xib文件

Mat*_*ick 23 iphone reusability uitableview xib ios

我有三个不同的UITableViews,每个都在它自己的视图中,通过标签访问.理想情况下,所有这三个表都共享相同的自定义UITableViewCell类和.xib文件.

我从一个表开始,将.xib的类设置为我的自定义类,将.xib的文件所有者设置为表的父UIViewController,这非常有效.所有与自定义视图相关的代码都在单元格的类中(基于控制器设置的属性的背景图像,基于标签根据控制器设置的单元属性所需的行数自定义单元格高度等) .

结果很好:单元负责所有可视布局并响应单元控件上的用户操作,而视图控制器负责创建单元格并设置其数据.

既然我需要在其他表中重用单元格,那么自定义单元格的.xib具有单个文件所有者的事实是个问题.而不是复制.xib文件,有一种简单的方法允许多个控制器拥有它吗?

Jon*_*nah 39

nib的文件所有者未得到严格执行.相反,它仅用于确定可用的出口和操作,以及在Interface Builder中设置绑定.无论nib文件中设置的类如何,您都可以将任何对象的nib作为其文件所有者加载.加载nib时,它会向文件所有者发送消息以重新建立绑定.如果实际的文件所有者对象无法识别这些选择器,则会触发"无法识别的选择器"异常.这意味着如果您的笔尖将某些绑定UITableViewCell到其文件所有者的"单元格"出口,则任何具有"单元格"属性的对象都可以加载该笔尖.您只需要注意不要使用此行为来发送无法识别的选择器或意外的插座类.

在您的情况下,请考虑创建一个UIViewController子类来充当您的笔尖的文件所有者.让三个现有控制器中的每一个都扩展该视图控制器子类.这样他们都可以继承nib文件所期望的同一组属性,并且在定义自己的自定义行为的同时安全地加载该nib.

  • @mputnamtennessee,你将无法做到.从nib文件加载的视图类由nib本身定义.上面的答案是参考不同的控制器类从公共nib文件加载相同UITableViewCell的实例.这与尝试从nib本身加载nib中找到的类的多个子类不同.你似乎有一个不同的问题需要解决,这可能值得开启一个新的问题. (3认同)