Iphone 自定义单元格,只有最后一个单元格获取[LayoutSubView]?
我正在为我的应用程序创建一个设置视图,该视图中有一个UITableView。我正在创建自定义单元格以满足我的需要,但我遇到了问题-只有最后一个单元格获得了Iphone 自定义单元格,只有最后一个单元格获取[LayoutSubView]?,iphone,ios,objective-c,ios6,uitableview,Iphone,Ios,Objective C,Ios6,Uitableview,我正在为我的应用程序创建一个设置视图,该视图中有一个UITableView。我正在创建自定义单元格以满足我的需要,但我遇到了问题-只有最后一个单元格获得了[layoutSubviews]。我做错什么了吗 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //int type = (indexPath.row == 0?1:0);
[layoutSubviews]
。我做错什么了吗
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//int type = (indexPath.row == 0?1:0);
//if(indexPath.row == 6) type = 2;
NSLog(@"row %i created", indexPath.row);
TableCell *cell = [[TableCell alloc] initWithType:indexPath.row];
cell.textLabel.text = @"Test cell";
return cell;
}
在我的自定义单元格中:
@implementation TableCell
UIImageView *shadowView;
int row;
- (id) initWithType:(int)type {
row = type;
self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
self.backgroundColor = [UIColor clearColor];
self.backgroundView = [[UIView alloc] init];
UIImage *shadowImage = [UIImage imageNamed:@"CellShadow"];
shadowImage = [shadowImage resizableImageWithCapInsets:UIEdgeInsetsMake(14, 14, 14, 14)];
shadowView = [[UIImageView alloc] initWithImage:shadowImage];
[self.contentView addSubview:shadowView];
//[self.contentView sendSubviewToBack:shadowView];
NSLog(@"agreed, row %i created", row);
[self layoutSubviews];
return self;
}
- (void) layoutSubviews {
NSLog(@"row: %i", row);
[super layoutSubviews];
shadowView.frame = CGRectMake(
0, 0,
self.contentView.frame.size.width,
self.contentView.frame.size.height
);
}
@end
连续地,当我旋转或应调用LayoutSubview时,仅报告最后一个单元格#6。有什么建议吗?不要直接调用
layoutSubviews
。使用[self-setNeedsLayout]
或[self-layoutifneed]
。但是不要在计算单元的init方法中调用这些函数
另外,不要调用[[TableCell alloc]initWithType:indexPath.row];直接的。相反,使用
-(id)dequeueReusableCellWithIdentifier:(NSString*)indexPath的标识符:(NSIndexPath*)indexPath
一旦您构建了该单元格,您可以告诉它它是行,但是请注意,当表格滚动时,单元格会被回收,因此您必须在每次调用cellforrowatinexpath
时更新该值
调整表视图的大小时,单元格应该重新获得布局(无需直接或间接调用)
请参阅。不要直接调用
布局子视图。使用[self-setNeedsLayout]
或[self-layoutifneed]
。但是不要在计算单元的init方法中调用这些函数
另外,不要调用[[TableCell alloc]initWithType:indexPath.row];直接的。相反,使用
-(id)dequeueReusableCellWithIdentifier:(NSString*)indexPath的标识符:(NSIndexPath*)indexPath
一旦您构建了该单元格,您可以告诉它它是行,但是请注意,当表格滚动时,单元格会被回收,因此您必须在每次调用cellforrowatinexpath
时更新该值
调整表视图的大小时,单元格应该重新获得布局(无需直接或间接调用)
请参阅。您不应直接调用布局子视图,一旦单元格准备好显示,iOS将自动调用它。您还应该按照@danh的建议对单元格进行去噪。如果您对所有这些都不太满意,那么我真的建议您看看免费的Sensive TableView框架,它可以自动创建此类设置视图(我在几行中创建了我的设置视图)。您不应该直接调用LayoutSubView
,一旦单元格准备好显示,iOS将自动调用它。您还应该按照@danh的建议对单元格进行去噪。如果您对所有这些都不太满意,那么我真的建议您看看免费的Sensive TableView框架,它可以自动创建这些设置视图(我在几行中创建了我的设置视图)。问题在于我自己的代码太差。使用cell.backgroundView有很大帮助。问题是我自己的代码太差。使用cell.backgroundView在这里帮助很大。不要自己调用布局子视图。当单元中的子视图的任何帧发生更改时,将调用它。即使只是更改自定义单元格中标签的文本,也不会调用LayoutSubview。利用单元的特性进行重用以获得更好的性能。因为它不会每次都分配单元。在您的代码中,似乎有很多内存问题,因为分配的单元不会被释放,新的单元被创建 不要自己调用布局子视图。当单元中的子视图的任何帧发生更改时,将调用它。即使只是更改自定义单元格中标签的文本,也不会调用LayoutSubview。利用单元的特性进行重用以获得更好的性能。因为它不会每次都分配单元。在您的代码中,似乎有很多内存问题,因为分配的单元不会被释放,新的单元被创建 谢谢你的详细回答。但是,即使使用[self-setNeedsLayout]而不是直接调用layoutSubviews,当视图旋转时,只有最后一行获得layoutSubviews。我应该更仔细地阅读您的代码。(布局子视图错误引起了我的注意。这些子视图肯定应该删除)。我已经编辑了答案。首先正确构建单元,布局应该可以正常工作。如果没有,请尝试在旋转时重新加载tableView数据,但您不需要它。我不使用可重用的单元格,因为这将是一个设置视图,并且只有少量单元格。不管怎样,它似乎都不起作用。谢谢你的详细回答。但是,即使使用[self-setNeedsLayout]而不是直接调用layoutSubviews,当视图旋转时,只有最后一行获得layoutSubviews。我应该更仔细地阅读您的代码。(布局子视图错误引起了我的注意。这些子视图肯定应该删除)。我已经编辑了答案。首先正确构建单元,布局应该可以正常工作。如果没有,请尝试在旋转时重新加载tableView数据,但您不需要它。我不使用可重用的单元格,因为这将是一个设置视图,并且只有少量单元格。是的,我做了很多改变,允许分配和重用,并且解决了这个问题。谢谢你的留言!是的,我做了很多更改,允许分配和重用,并解决了这个问题。谢谢你的留言!