UITableViewCell在UINavigationController应用程序中包装文本

时间:2011-05-11 05:03:39

标签: uitableview uinavigationcontroller

我根据文本的大小为每个单元格提供不同高度的tableview。 我在委托方法-tableView:heightForRowAtIndexPath中计算rowsize,并分配给数据源方法-tableView:cellForRowAtIndexPath中的文本。 我能够根据文本实现合适的高度,但是无法使文本环绕;相反,它只是从屏幕上消失。我正在使用基于导航的应用程序使用笔尖在子视图控制器中生成tableview。我玩了一些tableview的选项,但我无法进行文本换行。我希望看到下一个包装就好像它是一个textview,但是我希望整个内容显示在单元格中,而表格单元格中没有滚动条。这可能吗?

这是更新后的代码,高度正在自行调整,但单元格不是自动换行...

-

(CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *string = [self.quizDictionary objectForKey:[_temp objectAtIndex:testKV]];

    CGSize stringSize = [string sizeWithFont:[UIFont boldSystemFontOfSize:15]
                          constrainedToSize:CGSizeMake(320, 9999) 
                              lineBreakMode:UILineBreakModeWordWrap];
    return stringSize.height+25;
} 


- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int row = indexPath.row;
    if (row > 6) {
        return nil;
    }
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault 
                 reuseIdentifier:CellIdentifier] 
                autorelease];
        } 
    // configure the cell...
    NSString *string = [self getQuestionPart];

    CGSize stringSize = [string sizeWithFont:[UIFont boldSystemFontOfSize:15] constrainedToSize:CGSizeMake(320, 9999) lineBreakMode:UILineBreakModeWordWrap];
    UITextView *textV=[[UILabel alloc] initWithFrame:CGRectMake(5, 5, 290, stringSize.height+10)];
    textV.font = [UIFont systemFontOfSize:15.0];
    textV.text=string;
    textV.textColor=[UIColor blackColor];
 // textV.editable=NO;
    [cell.contentView addSubview:textV];
    [textV release];
    testKV++; 
    return cell;
}

2 个答案:

答案 0 :(得分:0)

你想:

cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;

让您的文本包含在单元格中。这与谨慎实施tableView:heightForRowAtIndexPath:相结合应该可以解决问题。

答案 1 :(得分:0)

是的,有可能!!!

看着这个,你需要有点棘手。您需要动态计算textView的高度,并根据TextView的高度,您需要返回单元格的高度..

这是您可以用来计算字符串大小的代码....

首先获得String&的大小根据字符串

设置单元格的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {  

    NSDictionary *d=(NSDictionary *)[self.menuArray objectAtIndex:indexPath.section];
    NSString *label =  [d valueForKey:@"Description"];
    CGSize stringSize = [label sizeWithFont:[UIFont boldSystemFontOfSize:15]
                          constrainedToSize:CGSizeMake(320, 9999) 
                              lineBreakMode:UILineBreakModeWordWrap];

    return stringSize.height+25;

} 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    //}

    NSDictionary *d=(NSDictionary *)[self.menuArray objectAtIndex:indexPath.section];

    NSString *string = [d valueForKey:@"Description"];
    CGSize stringSize = [string sizeWithFont:[UIFont boldSystemFontOfSize:15] constrainedToSize:CGSizeMake(320, 9999) lineBreakMode:UILineBreakModeWordWrap];

    UITextView *textV=[[UILabel alloc] initWithFrame:CGRectMake(5, 5, 290, stringSize.height+10)];
    textV.font = [UIFont systemFontOfSize:15.0];
    textV.text=string;
    textV.textColor=[UIColor blackColor];
    textV.editable=NO;
    [cell.contentView addSubview:twitLbl];
    [twitLbl release];

    return cell;
}