ViewWithTag不再适用于iOS 8?快速的

时间:2014-09-11 21:56:25

标签: ios swift uicollectionview ios8

我刚刚下载了新的Xcode GM,经过大量的错误后,我的快速项目完全正常工作(耶!)。然而今天我尝试在iOS 8设备上安装应用程序,现在我的所有表和集合视图都破坏了应用程序。麻烦来自这样的事情:

let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionCellCB", forIndexPath: indexPath) as UICollectionViewCell

var pic = cell.contentView.viewWithTag(10) as UIImageView
pic.image = DisplayImage;

我已经仔细检查了我的故事板,以确保我有一个具有该重用标识符的单元格和带有该标记的uiimage视图,但它在这里和其他场景都不起作用。 它在我的iOS 7设备上工作正常,但在iOS 8上每次都会中断。我希望这是一个错误,但我无法确定。其他人遇到这个问题或知道如何解决它?

主要问题是,当我调用viewWithTag时,函数返回nil而不是像iOS 7及之前的那样返回视图的引用。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。有些单元格没有显示任何内容是iOS8。 viewWithTag未返回子视图。

似乎未正确创建单元格且子视图不存在。下面是两个具有不同标识符的单元格的内容 - 第一个是破坏的,第二个是工作:

(lldb) po [cell recursiveDescription]
<tSettingsViewCell: 0x7a5d7950; baseClass = UITableViewCell; frame = (0 0; 695 44); text = 'WiFi'; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7a5d7af0>>
   | <_UITableViewCellSeparatorView: 0x7a5d77f0; frame = (15 43; 680 1); layer = <CALayer: 0x7a5d8500>>

(lldb) po [cell recursiveDescription]
<tSettingsViewCell: 0x7a430210; baseClass = UITableViewCell; frame = (0 0; 695 44); text = 'Server'; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7a4301e0>>
   | <UITableViewCellContentView: 0x7a430170; frame = (0 0; 669 44); clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7a429850>; layer = <CALayer: 0x7a430140>>
   |    | <UITableViewLabel: 0x7a430080; frame = (15 0; 645 44); text = 'Server'; clipsToBounds = YES; opaque = NO; layer = <_UILabelLayer: 0x7a430030>>
   |    | <UITextField: 0x7a42f980; frame = (495 8; 185 30); text = ''; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; tag = 200; layer = <CALayer: 0x7a42fce0>>
   | <_UITableViewCellSeparatorView: 0x7a42ad10; frame = (15 43; 680 1); layer = <CALayer: 0x7a42aad0>>
   | <UIButton: 0x7a42a870; frame = (677 16; 8 13); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7a42a840>>
   |    | <UIImageView: 0x7a4295a0; frame = (0 0; 8 13); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7a429660>>

故事板未使用自动布局。

我还没弄清楚为什么会这样。

编辑:

结果是自定义单元格过滤掉了顶部分隔符视图(没有将其添加到子视图中),这似乎破坏了一些东西。当所有子视图在addSubview:(UIView *)视图中传递给super时,它再次开始工作。还是很神秘......