限制UITableView单元格中的字符长度

时间:2012-12-14 13:58:22

标签: iphone objective-c

我必须限制UITableView的单元格文本的字符数或长度。因为每个单元格显示非常长的长文本,我必须将这些文本限制为例如140个字符。因为它导致慢滚动和内存问题等...

我正在从SQL DB加载单元格文本:

    appClass = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    readerClass = (Reader *)[appClass.wordList objectAtIndex:indexPath.row];

    cell.textLabel.text=readerClass.Name;

感谢。

3 个答案:

答案 0 :(得分:4)

使用:

cell.textLabel.text = (readerClass.Name.length > 140 ? [readerClass.Name substringToIndex:140] : readerClass.Name);

如果字符少于140个字符,则设置完整readerClass.Name,如果字符长,则设置前140个字符。

另外,我假设您在UITableViewCell中有一个UILabel,当文本被截断时会自动附加...(省略号)。如果没有,您可以自己添加省略号:

cell.textLabel.text = (readerClass.Name.length > 140 ? [[readerClass.Name substringToIndex:137] stringByAppendingString:@"..."] : readerClass.Name);

再加上这个问题,因为你问的只是获得第一行:

// get first line break range
NSRange rangeOfFirstLineBreak = [cell.textLabel.text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]];
// check if first line break range was found
if (rangeOfFirstLineBreak.location == NSNotFound) {
    // if it was, extract the first line only and update the cell text
    cell.textLabel.text = [cell.textLabel.text substringToIndex:rangeOfFirstLineBreak.location];
}

答案 1 :(得分:0)

这样的事情:

NSRange stringRange = {0, MIN([readerClass.Name length], 140)};
cell.textLabel.text = [readerClass.Name substringWithRange:stringRange];

答案 2 :(得分:0)

这应该有效。它还添加了'...'

NSString *name = readerClass.Name;

if( name.length > 140 ){
    name = [place substringToIndex:140];
    name = [NSString stringWithFormat:@"%@...", name];
}

cell.textLabel.text= name;