bsh*_*ley 6 ios ios6 uicollectionview
iOS 6.0,在iPhone 5上测试
我正在UICollectionViewController从一个笔尖加载一个子类.当我加热awakeFromNib方法时,它声称视图已加载.致电collectionView回报nil.
因此,我在注册加载我的细胞的笔尖时遇到了问题.
- (void)awakeFromNib {
if ([self isViewLoaded])
NSLog(@"[%@ %@] registered with %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd),
self.collectionView);
UINib *nib = [UINib nibWithNibName:@"MyCollectionCell" bundle:nil];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:NIB_ID];
}
Run Code Online (Sandbox Code Playgroud)
上面的输出:
2012-09-22 19:21:49.129 myApp[7182:907] [MyCollectionViewController awakeFromNib] registered with (null)
Run Code Online (Sandbox Code Playgroud)
此外,loadView并且viewDidLoad不会被调用(从笔尖加载时预期).
尝试加载单元格时,我失败了.
当前的解决方法,冗余注册nib collectionView:cellForItemAtIndexPath::
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UINib *nib = [UINib nibWithNibName:@"MyCollectionCell" bundle:nil];
[collectionView registerNib:nib forCellWithReuseIdentifier:NIB_ID];
Run Code Online (Sandbox Code Playgroud)
问题:你遇到过这个问题吗?你看到我的方式错误了吗?这是一个已知的错误?
编辑:附加信息......
在awakeFromNib中断,collectionView似乎无法访问
(lldb) po [self view]
(UIView *) $1 = 0x1f158400 <UICollectionView: 0x1f158400; frame = (0 0; 320 548); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x1ed8fcf0>; layer = <CALayer: 0x1ed8f790>; contentOffset: {0, 0}> collection view layout: <UICollectionViewFlowLayout: 0x1ed919a0>
(lldb) po [self collectionView]
(UICollectionView *) $2 = 0x00000000 <nil>
Run Code Online (Sandbox Code Playgroud)
修改wakeFromNib使用view而不是collectionView更好的解决方法:
[(UICollectionView *)self.view registerNib:nib forCellWithReuseIdentifier:NIB_ID];
Run Code Online (Sandbox Code Playgroud)
从笔尖加载视图控制器并不是为了加载视图。iOS 延迟加载方案只会在尝试访问视图时才加载视图。这是为了限制尚未显示在屏幕上的内容的内存消耗。
当您使用“self.view”时,“view”属性的 UIViewController 基类访问器将加载视图(如果尚未加载)。(然后你的 viewDidLoad 将被调用。)
如果您为 viewController 提供 viewDidLoad 方法,则可以在那里注册您的 UINib。
| 归档时间: |
|
| 查看次数: |
3553 次 |
| 最近记录: |