这是我的代码,在我的应用程序中,我为UITableView中的每个单元格使用自定义UITableViewCell,并在“heightForRowAtIndexPath”中计算单元格高度,但如果我使用“dequeueReusableCellWithIdentifier”,则滚动表格时单元格会重叠视图。当不使用“dequeueReusableCellWithIdentifier”时问题就消失了。不知道为什么会出现这个问题?
实际上,我想知道如果不使用“dequeueReusableCellWithIdentifier”来创建单元格,如果tableview显示了很多单元格会不会引起任何内存问题?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellIdentifier = @"threadCell";
SYGBBSTableViewCell * cell=nil;
//if I comment below line code , the cell overlap issue solved
cell = (SYGBBSTableViewCell*) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[SYGBBSTableViewCell alloc] initMessagingCellWithReuseIdentifier:cellIdentifier];
}
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
-(void)configureCell:(SYGBBSTableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath {
SYGBBSTableViewCell* ccell = (SYGBBSTableViewCell*)cell;
...
cell.content.text=content;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;
{
/// Here you can set also height according to your section and row
NSDictionary* thread = [MyGoController getBBSThreadAtIndex:indexPath.row];
int height = [SYGBBSTableViewCell cellHeightForThreadAt:thread];
return height;
}
答案 0 :(得分:0)
问题在于,当您使用dequeueReusableCellWithIdentifier
获取单元格时,它不会调用您的初始化程序initMessagingCellWithReuseIdentifier
。
将initMessagingCellWithReuseIdentifier
重命名为initWithStyle:reuseIdentifier:
,它应该有效。
请注意,initWithStyle:reuseIdentifier:
是指定的初始值设定项(文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html),您应该调用[super initWithStyle:style reuseIdentifier:reuseIdentifier];
。之后,实现您正在initMessagingCellWithReuseIdentifier
中实现的逻辑。
答案 1 :(得分:0)
dequeueReusableCellWithIdentifier
对于单元格重用非常有用,您应该检查cell == nil
,除非您使用- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
来获取可重复使用的单元格。我认为问题是configureCell
,因为单元格高度发生变化,你应该配置具有适当高度的单元格,你可以在configureCell
方法中尝试这样的代码:
-(void)configureCell:(SYGBBSTableViewCell*)cell atIndexPath:(NSIndexPath *)indexPath {
SYGBBSTableViewCell* cell = (SYGBBSTableViewCell*)cell;
CGFloat cellHeight = [self tableView:self.tableView heightForRowAtIndexPath:indexPath];
[cell layoutSubviewWithHeight:cellHeight];
[cell configureContent];
}