美文网首页
自定义实现@someone 的功能思路(三)

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

作者: 化二缺 | 来源:发表于2019-01-10 15:36 被阅读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

    相关文章

      网友评论

          本文标题:自定义实现@someone 的功能思路(三)

          本文链接:https://www.haomeiwen.com/subject/tqdarqtx.html