如何更改 UITableView 中文本的位置?

Posted

技术标签:

【中文标题】如何更改 UITableView 中文本的位置?【英文标题】:How do i change the location of the text in UITableView? 【发布时间】:2009-05-22 21:33:34 【问题描述】:

如何更改文本的位置并在 UITableView 中显示完整的字符串?

这是我所拥有的屏幕截图,一旦你看到它,你就会明白我的意思。谢谢 My App http://img188.imageshack.us/img188/9926/chucknhelp.tif

【问题讨论】:

【参考方案1】:

您可以在不继承 UITableViewCell 的情况下做到这一点。

在方法tableView:cellForRowAtIndexPath: 中,创建一个基本的UITableViewCell 并更改此单元格中包含的UILabel 的属性。更改最大行数以在单元格中容纳更多文本。

很遗憾,单元格的标签无法通过属性访问,因此您需要使用subviews 属性来获取它。

当然,这使用了 UITableViewCell 的实现细节,因此它可能会与 SDK 的未来版本中断。小心使用。

这是一个例子:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellId"];
    if (cell == nil)
    
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"YourCellId"] autorelease];
        cell.font = [UIFont systemFontOfSize:16];
        UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0];
        [cellLabel setNumberOfLines:3];
    
    cell.text = @"Your text";
    return cell;

更新:

要设置行高以适合文本,您可以执行以下操作:

1.设置单元格高度以适合文本。

你需要这样的东西:

CGSize textSize = [text sizeWithFont:font
                   constrainedToSize:CGSizeMake(313, 1000)
                       lineBreakMode:UILineBreakModeWordWrap];
cell.frame = CGRectMake(0.0f, 0.0f, 320.0, textSize.height);

2.在tableView:heightForRowAtIndexPath: 方法中返回单元格高度。

例如这样:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell* cell = [self tableView:(UITableView*)self.view cellForRowAtIndexPath:indexPath];
    CGRect cellFrame = cell.frame;
    return cellFrame.size.height;

【讨论】:

谢谢!但是在我的 awakeFromNib 中,我有这个代码“self.jokeTableView.rowHeight = 70.0;”如何使 rowHeight 根据需要容纳多少文本而改变? 我在回答中添加了一个如何执行此操作的示例。希望对您有所帮助。【参考方案2】:

子类UITableViewCell,并在子类的loadView 方法中,在其contentView 中创建一个UILabel。将此标签设置为具有适当的包装和位置。

【讨论】:

这个方法可以指定吗? - (UITableViewCell *)tableViewCell:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 您无法在该方法中全部指定。您需要根据要显示的文本长度更改每个单元格的高度。您还需要将 UILabel 可以显示的最大行数设置为大于 1 的数字。【参考方案3】:

亚当说得对。有关更多详细信息(以及快速滚动的方法),您可以查看 atebits.com 上完全绕过 UILabel 方法的此条目。

Loren Brichter's UITableViewCell subclassing example

您还可以查看developer.apple.com 中的 TableViewSuite 示例,它包含 5 个不同的示例,它们的复杂性越来越高,用于构建自定义 TableView。最后一个示例在结构上与 atebits.com 上的教程非常相似。

斯坦福 iPhone 课程的第 8 讲也是关于 Scroll 和 TableViews,并且有一些子类化 UITableViewCell 的示例。

iPhone Course

【讨论】:

以上是关于如何更改 UITableView 中文本的位置?的主要内容,如果未能解决你的问题,请参考以下文章

UILabel - 如何更改文本位置

如何更改 UITableHeaderView 的背景颜色和文本颜色

在 UITableView 中单击时更改 UIButton 颜色和文本

如何使用文本字段 UITableView 从自定义单元格中获取值?

无法更改 UITableView 中节标题的文本属性

更改 UITableView 中一些选定的表格视图单元格文本的颜色