媒体/列表类的多行文本展现问题

iOS的开发过程中,咱们在进行文本展现的功能结束时,经常会遇到文本过长的状况,假定咱们运用的是UITableView,那么文本在Cell中展现时假定悉数展现彻底的话,那么或许出现ios系统整屏只能展现一个Cios14.7正式版ell的ios14.4.1更新了什么状况。此刻咱们需求对字体规划多行文本进行切割,在前部分的结尾加上“翻开/全文”的按钮,用户在点击此按钮后,Cel字体大小怎样调l再翻开进行悉数文本的展字体大小怎样调示,翻开后在悉数文本的结尾处,还需求一个“收起”的按钮,字体全国用户点击后Cell再次回到收起的状况。

iOS开发 多行文本的打开/全文和收起(UITextView)

怎样结束

1.模ios最好玩的手游型预备

对于展现数据的模型,咱们需求增加除了content(内容)外至少3个额定特色

**

//文字内容的实践高度
@ios14.4.1更新了什么property (nonatomic, assign) CGFloat titleAc字体大小怎样调tualH;
//文字内容的最大高度,详细的数值是 一行文本的高度*希望的最大闪现行字体转换器数
@property (noios15正式版别什么时候发布natomic, assign) CGFloat titleMaxH;
//内容是否翻开(默许不设置,都是NO,收起状况)
@propertios15y (nonatomic, assign) BOOL isOpen;

模型初始化时,ios下载在content特色的set办法中,对增加的特色进行赋值

- (void)setContent:(NSString *)cont字体美化大师ent {
_content = content;
if ([NSString isEmptyString:content]) {
self.titleActualH = 0;
self.titleMaxH = 0;
} else {
NS字体UInteger numCount = 5;ios下载 //这是cell收起状况下希望展现的最大行数
NSString *str = @"这是一行用来核算高度的文本"; //这ios15行文本也可认为一个字,但不能太长
CGFloat W = kScreenWidth-30; //这里是文本展现的宽度
self.titleActualH = [content boundingRectWithSize:CGSizeMake(W, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kRegularFont(14)}ios系统 context:nil].sizeios8备忘录.height;
self.titleMaxH = [strios是什么意思 boundingRectWithSize:CGSizeMake(W, MAXFLOAT)字体规划 options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttios14.4.1更新了什么ributeName:k字体规划RegularFont(14)} context:nil].size.height*numCountios14.4.1更新了什么;
}
}

2.Cell赋值

cell中用来展现文本的控件选iOS用UITextView,再用富文本的办法进行内容的填充以及点击的照顾。PS:此处也可以用UILabel+UIButton的办法,但是结束起来太费事,是一种很低效的解决方案。
在cell的赋值办法中,根据文本实践高度和最大高度的比较,动态的实际“收起”按钮(文本运用富文本的办法结束)。

**

- (void)setupCellData:(LWYMyFavouriteMo字体全国del *)model {
NSString *字体suffixStr = @""; //增加的后缀按钮文本(收起或翻开)
NSString *contentStr = model.content;
CGFloat H = model.titleActualH; //文本的高度,默许为实践高度
if (model.titleActualH > model.titleMaxH) {字体美化大师
//文本实践高度>最大高度,需求增加后缀
if (model.isOpen) {
//文本现已翻开,此刻后缀为“收起ios8备忘录”按钮
suffixStr = @"收起";
contentStr = [NSStri字体规划ng stringWithFormat:@"%@ %@", contentios最好玩的手游Str, suffixStr];
H = modeliOS.titleActualH;
} else {
//文本现已收起,此刻后缀为“翻开/全文”按钮
//需求对文本进行截取,将“...翻开”增加到咱们限制的展现文字的结尾
NSUios模拟器Integer numCount = 5; //这是cell收起状况下希望展现的最大行数
CGFloat W = kScreenWiiOSdth-30; //这里是文本展现的宽度
NSS字体下载tring *tempStr = [self stringBy字体规划Truncating字体全国String:contentStr suffixStr:@"...翻开" font:kRegularFont(14) forWidth:W*numCount];
contentStr = tempStr;
suffixStr = @"翻开";
H = model.字体全国titleMaxH;
}
}
NSMutableAttrios14.4.1更新了什么ibutedString *attStr = [[NSMutableAttributedString alloc] initWithString:contentStr attributes:@{NSFontAttributeName:kRegularFont(14)}];
self.contentTextView.linkTextAttributes = @{};
//给富文本的后缀增加点击工作
if(![NSString isEmptyString:suffixStr]){
NSRange range3 = [contentStr rangeOfString:suffixStr];
[attStr addAttribute:NSForegroundColorAttributios15正式版别什么时候发布eName value:[UIColor sys字体下载tem字体大全BlueColor] range:range3];//[UIColor colorWit字体大小怎样调hHexString:@"#000000"]
NSString *valueString3 = [[NSString stringWithFormat:@"didOpenClose://%@", suffixStr] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedChara字体规划cterSet]];
[attStr addAttrib字体ute:NSLinkAttributeName value:valueString3 range:range3];
}
self.contentTeios15正式版别什么时候发布xtView.ios下载attributedText = attStr;
}
/// 将文本按长度度截取并加上指定后缀字体辨认
/// @param str 文本
/// @param suffixStr 指定后缀
/ios8备忘录// @paramios系统 font 文本字体字体规划
/// @param length 文本长度
- (NSString*)stringByTruncatingString:(NSString *)str suffios是什么意思ixStr:(NSString *)suffixSt字体管家r font:(UIFont *)font forLength:(CGFloat字体大全)length {
if (!str字体管家) return nil;
if (str  && [str isKindOfClass:[ios是什么意思NSString class]]) {
for (int i=(int)[s字体转换器tr length] - (int)[suffixStr length]; i< [str length];i = i - (int)[suffixStr length]){ios最好玩的手游
NSString *tempStr =字体大小怎样调 [str substringToIndex:i];
CGSize size字体转换器 = [tempStr sizeWithAttributes:@{NSFontAttrib字体转换器uteName:font}];
if(size.width < length){
tempStr = [NSStri字体转换器ng strinios14.4.1更新了什么gWithFormat:suffixStr, tempStr];
CGSize size1 = [tempStr sizeWithAttributes:@{ios系统NSFontAttributeName:font}];
if(size1字体辨认扫一扫.width < lengthios是什么意思){
str = tempStr;
bre字体ak;
}
}
}
}
return str;
}

3.在UITex字体辨认tView的署理办法中照顾点击工作

Cell中的代码

*ios14.7正式版*

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
if ([[URL scheme] isEqualToString:@"didOpenClose"]) {
//点击了“翻开”或”收起“,经过署理或许block回调,让持有tios8备忘录ableView的控字体大全制器去改写单行Cell
if (self.openCloseBlock) {
self.openCloseBlock();
}
return NO;
}
ret字体大小怎样调urn YES;
}字体大小怎样调

控制器中的代码(此处是用block结束)

**

//回来Cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
LWYM字体全国yFavouriteModel *model =ios是什么意思 self.dataArray[indexP字体辨认扫一扫ath.section];
CGFloat otherH = 1字体00; //除了文本内容外其他的高度ios14.4.1更新了什么(根据项目需求而定)
if (model.titleActualH > model.titleMaxH) {
if (model.isOpen) {
return model.titleActualH+otherH;
} e字体管家lse {
return model.titleMaxH+otherH;
}
} else {
return model.titleActualH+otherH;
}
}
//回来Cel字体大全l
- (UITableViewCell *)tableView字体管家:(UITableView *)tableView cios是什么意思ellForRowAtIndexPath:ios最好玩的手游(NSios15正式版别什么时候发布IndexPaios15正式版别什么时候发布th *)indexPath {
LWYMyCollectionCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID" forIndexPath:indexPath];ios是什么意思
LWYMyFavouriteModel *model = s字体辨认elf.dataArray[indexPath.section];
[cell setupCellData:model];
kWeakSelf(self);
[cell setOpenCloseBlios8备忘录ock:^{ //Cell点击了“翻开”或“收起”
NSMutableArray *tempArr = weakse字体全国lfios14.4.1更新了什么.dataArray;
for (int i =ios下载 0; i < weakself.dataArray.count; i++) {
LWYMyFavouriteModel *subModel = weakself.dataArray[i];
if (subModel.favouriteId == model.favouriteId) {
//改写数据源中对应的数据
model.isOpen = !model.isOpen;
[tempArr replaceObjectAtIndex:i withObject:model];
weakself.dataArray = [NSMu字体大小怎样调tableArray arrayWithArray:tempArr];
//改写指定的行
NSIndexSet * indexSet = [[NSIndexSet alloc] iniOSitWithIndex:i];
[weakself.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];
break;
}
}
}];
r字体大小怎样调eturn cell;
}

欢迎重视群ios下载众号:编程大鑫,一同交流行进!

总结:以上就是多行文本的翻开和收起的中心流程,怎样样是不是很简单呢