接下来咱们开始把选来的 Person 加到textView上 ,肯定不能直接用NSString 的 ,因为我们需要他具有特性并且本身携带信息,可以独一无二区分。由于我们公司的项目里的Person这个自定义类型,就是独一无二的。所以Person是需要携带的必然信息。经过各种百度,我终于找到了,
NSTextAttachment
于是我继承NSTextAttachment 写了一个自己的,代码如下
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
//.m 什么也没写
@interface DD_Media_Atment : NSTextAttachment
@property (nonatomic, assign) CGSize imageSize;
@property (nonatomic, strong) Person *person;
@property (nonatomic) BOOL isPerson; //不是人的时候 就是用来存字符串的
@property (nonatomic, strong) NSString * needPushStr;
@end
NS_ASSUME_NONNULL_END
好了现在我们有一个携带容器了,接着就是写了,
- (void)atStringAppendingWithArray:(NSArray *)arr
{
NSMutableAttributedString *addMutableAttributeStr = [[NSMutableAttributedString alloc] initWithAttributedString:self.discussView.attributedText];
for (int i = 0; i < arr.count; i++) {
DD_Media_Atment *attach = [[DD_Media_Atment alloc] init];
attach.person = [arr objectAtIndex:i];
attach.isPerson = YES;
NSString *name = [NSString stringWithFormat:@"@%@ ", attach.person.name];
attach.needPushStr = name;
if (![attach.person.name isEmpty]) {
[_staticALLNameArray addObject:attach.person];
}
//这个颜色需要 换成黑的 现在留着好识别
attach.image = [self imageWithString:name font:[UIFont systemFontOfSize:17] color:[UIColor colorWithHexString:@"#2DC4B9"]];
//attach.image = [self imageWithString:name font:[UIFont systemFontOfSize:17] color:[UIColor blackColor]];
CGSize size = [name sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(CGFLOAT_MAX, 30) lineBreakMode:NSLineBreakByWordWrapping];
//这里因为是生成的图片 所以大小需要自己微调
attach.imageSize = CGSizeMake(size.width - 5, self.discussView.font.pointSize + 3);
NSAttributedString *imagestr = [NSAttributedString attributedStringWithAttachment:attach];
NSMutableAttributedString *mutablImageStr = [[NSMutableAttributedString alloc] initWithAttributedString:imagestr];
NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:self.discussView.font.pointSize]};
[mutablImageStr addAttributes:attributes range:NSMakeRange(0, imagestr.length)];
[addMutableAttributeStr appendAttributedString:mutablImageStr];
}
if (addMutableAttributeStr.length > 0) {
[self.discussView.textStorage insertAttributedString:addMutableAttributeStr atIndex:self.discussView.selectedRange.location];
}
self.discussView.attributedText = [[NSAttributedString alloc] initWithAttributedString:addMutableAttributeStr];
self.discussView.selectedRange = NSMakeRange(self.discussView.attributedText.length, 0);
NSLog(@"%@", self.discussView.text);
[self reloadTextViewFrame:self.discussView];
}
这个生成图片的方法:
attach.image = [self imageWithString:name font:[UIFont systemFontOfSize:17] color:[UIColor colorWithHexString:@"#2DC4B9"]];
见:把文字转换成图片
上面的思路就是 把 DD_Media_Atment 变成图片 加入 self.discussView.attributedText
于是我们的效果如下
8.jpeg
好了,显示似乎没有问题了,
那么接下来就是发送私信了:
//Content 需要处理 因为文中掺杂了表情和文字 还有抽象图片
DDMediaAtCustomMessage *message = [DDMediaAtCustomMessage messageWithContent:Content title:self.transmitleftTitleLabel.text articleid:@"这里需要接口穿过来" imageUrl:_infoModel.pushimageurl];
Person *mine = [DDTool getMySelf];
RCUserInfo *user = [[RCUserInfo alloc] initWithUserId:mine.uid name:mine.name portrait:mine.avatar];
for (int i = 0; i < _aLLNameArray.count; i++) {
Person *person = [_aLLNameArray objectAtIndex:i];
message.senderUserInfo = user;
[[RCIM sharedRCIM] sendMessage:ConversationType_PRIVATE
targetId:person.uid
content:message
pushContent:[NSString stringWithFormat:@"%@:%@", mine.name, Content]
pushData:nil
success:^(long messageId) {
}
error:^(RCErrorCode nErrorCode, long messageId){
}];
}
DDMediaAtCustomMessage 是我自定义的融云消息,融云的内容不在本文范畴,不再那啥了,嘿嘿。
点击发送:biubiu~
似乎可以了,结束了,但是我们有以下问题 :
1. 输入文字以后,再输入表情键盘的表情,前面的文字丢失
2.输入表情以后,后面的文字失去了自己的颜色和大小,变成了系统默认的。
3.怎么拼接表情 和文字 以及抽象的图片 到 融云消息 Content
4.咱们好想没写表情键盘里自带的删除的功能
网友评论