IOS5.0之后,在UITableView里可直接绘制自定义的UITableViewCell,还不会自定义UITableViewCell,直接传送门。要记得的是storyboard中的identifier(标识)一定要和代码中一致,用起来直观方便,似乎原来从xib(nib)文件中读取的时代,已经一去不复返了。但假设我们有UITableViewA和UITableViewB,我们在UITableViewA中自定义了好几个UITableViewCell,现在我们要在UITableViewB中重用这些现成的UITableViewCell,比较理想的方法就是在UITableViewB中使用identifier创建,但是不行,因为在UITableViewA中正常使用的dequeueReusableCellWithIdentifier:在UITableViewB返回的竟是nil。 这里我们首先了解下identifier的作用,每一个UITableViewCell都会有一个reuseIdentifier(重用标识),当配置了reuseIdentifier,UITableView会将这个对象连同reuseIdentifier一起放到自己对象池里,当再次创建UITableViewCell对象时,UITableView会先在对象池中匹配是否已经创建过这个对象,若创建了,则不再重新创建(如果重复创建,当UITableView行数较多时,会耗光IOS的内存),直接返回之前已创建的对象。因此,我们通过UITableViewA创建的UITableViewCell,在UITableViewA对象池中,已经按我们定义的identifierA,完成重用,但其作用范围仅在UITableViewA的对象池内,当我们调用UITableViewB,其
list of UITableViewCell objects 还是空的,所以其返回值肯定为空。这里我也大胆的猜测一下storyboard在载入UITableViewA时,会自动将它的UITableViewCell(我们定制的)的界面资源载入一次,所以我们可以直接调用dequeueReusableCellWithIdentifier: .
既然不能直接调用,我们只能走回通过xib文件的老路了,在xcode中继续创建xib文件,然后子类化UITableViewCell,并与xib文件相关联,在UITableView中载入时,我给一段我的代码
需要注意的就是要调用IOS5.0加入的函数registerNib:forCellReuseIdentifier:,最后再总结一下,UITableViewCell的重用标识,并没有用一个全局的对象池,其是只对单个UITableView实例而言的重用标识,Demo有些大,我就不发了,有童鞋想要我再发。
|
|