UITableView Custom Cell最初只为所有单元格显示一行文本

时间:2014-02-25 20:34:13

标签: iphone cocoa-touch ios6

我正在使用自定义单元格使用Facebook Graph API显示Facebook页面的帖子。我正在获取JSON数据,我将所有帖子转换为msgArray,然后将此msgArray传递给我的视图控制器,其中我有我的表视图,然后使用此msgArray填充自定义单元格中的数据。但是,当我在自定义单元格中显示数据时,它只为表格视图的所有单元格加载标签中的一行文本(postText:labelName),当我上下滚动它时,几个单元格是显示完整的文本,很少只显示一行文本,这取决于我等待文本加载的程度。

以下是我的表格视图代码:

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return [msgArray count];
}

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier=@"Cell";


    CustomCell *cell= [tableView dequeueReusableCellWithIdentifier:cellIdentifier];



    //UITableViewCell *tablecell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(cell==nil)
    {


      NSArray *nib=[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];


        cell=[nib objectAtIndex:0];


    }

//if(cell==nil)
  //  {
    //    cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    //}




        cell.postText.lineBreakMode=NSLineBreakByWordWrapping;
    cell.postText.numberOfLines=0;
        [cell.postText sizeToFit];

     cell.postText.text=[msgArray objectAtIndex:indexPath.row];



    return cell;

}



(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   //This function is calculating my height for each row depending upon text length which is correct.

    NSString *text=[msgArray objectAtIndex:indexPath.row];

    CGSize constraint=CGSizeMake(300,20000.0f);

    CGSize size=[text sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];

    CGFloat height=MAX(size.height,44.0f);

    return height+(100*2);


}

还有一件事,如果我使用的是默认UITableViewCell,并将文本设置为cell.textLabel.text=[msgArray objectatIndex:indexPath.row];,它会正确显示数据。

请帮我摆脱这个。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试将其numberOfLines属性更改为0?默认情况下为1。

cell.textLabel.numberOfLines = 0;