1

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

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

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

    cell.textLabel.text=readerClass.Name;

谢谢。

4

3 回答 3

4

利用:

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

这将在readerClass.Name少于 140 个字符时设置完整,如果它较长则设置前 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];
}
于 2012-12-14T14:03:11.800 回答
0

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

NSString *name = readerClass.Name;

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

cell.textLabel.text= name;
于 2012-12-14T14:04:00.157 回答
0

像这样的东西:

NSRange stringRange = {0, MIN([readerClass.Name length], 140)};
cell.textLabel.text = [readerClass.Name substringWithRange:stringRange];
于 2012-12-14T14:02:54.897 回答