自定义实现@someone 的功能思路(三)

2019-01-10  本文已影响33人  化二缺

接上节:自定义实现@someone 的功能思路(二)

接下来咱们开始把选来的 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~

9.jpeg

似乎可以了,结束了,但是我们有以下问题 :
1. 输入文字以后,再输入表情键盘的表情,前面的文字丢失
2.输入表情以后,后面的文字失去了自己的颜色和大小,变成了系统默认的。
3.怎么拼接表情 和文字 以及抽象的图片 到 融云消息 Content
4.咱们好想没写表情键盘里自带的删除的功能

image.png 请看下集。。。 image.png
上一篇下一篇

猜你喜欢

热点阅读