我必须限制UITableView的单元格文本的字符数或长度。因为每个单元格显示非常长的长文本,我必须将这些文本限制为例如140个字符。因为它导致慢滚动和内存问题等...
我正在从SQL DB加载单元格文本:
appClass = (AppDelegate *)[[UIApplication sharedApplication] delegate];
readerClass = (Reader *)[appClass.wordList objectAtIndex:indexPath.row];
cell.textLabel.text=readerClass.Name;
感谢。
答案 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;