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

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

现在需要开始输入了

  • 首先文字


    3.jpeg

    前文提到我们输入部分用的是UITextView ,所以我们要遵守他的协议和方法,

UITextViewDelegate
//每当键盘输入内容的时候 都会有监听
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
//输入结束的时候调用
- (void)textViewDidEndEditing:(UITextView *)textView
//输入改变的时候调用
- (void)textViewDidChange:(UITextView *)textView

看上一节 第一个部分的要求 需要不限制输入 就是输入多少都需要显示,textview的frame就要变大,所以:(这个地方个人觉得也应该限制高度,就是最大到多大,但是UI没有要求,就暂时没加)

- (void)textViewDidChange:(UITextView *)textView
{
    [self reloadTextViewFrame:textView];
}
- (void)reloadTextViewFrame:(UITextView *)textView
{
    CGRect frame = textView.frame;
    CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT);
    CGSize size = [textView sizeThatFits:constraintSize];
    if (size.height <= frame.size.height) {
    } else {
       //这里限制最小大小就是30 
        if (size.height <= 30) {
            size.height = 30;
            textView.scrollEnabled = NO; // 不允许滚动

        } else {
            textView.scrollEnabled = YES; // 允许滚动
        }
    }
    textView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, size.height);
// textView.frame改变以后 他下面的两个view 也要跟着下移 
    _lineView.frame = CGRectMake(15, self.discussView.bottom + 15, SCREEN_WIDTH - 15, 0.5);
    _transmitbgView.frame = CGRectMake(15, self.lineView.bottom + 15, SCREEN_WIDTH - 30, 196 * WIDTH_SCALE);
}

于是我们有一下效果 :


4.jpeg
  • 表情键盘部分


    5.jpeg

这是我们的小伙伴自己写的表情键盘 具体实现不便透露,他给我提供了一下接口

typedef NS_OPTIONS(NSUInteger, DDEmotionInputViewType) {
    DDEmotionInputViewTypeShowCamera = 1 << 0,
    DDEmotionInputViewTypeShowAt = 1 << 1,
};


@interface DDEmotionInputView : UIControl

/**
 初始化方法
 
 @param type 键盘类型
 @param textView textView
 @param textViewDelegate textView的代理对象
 @return 实例对象
 */
- (instancetype)initWithType:(DDEmotionInputViewType)type textView:(UITextView *)textView textViewDelegate:(nullable id<UITextViewDelegate>)textViewDelegate;

/**
 初始化方法
 
 @param type 键盘类型
 @param textField textView
 @param textFieldDelegate textView的代理对象
 @return 实例对象
 */

- (instancetype)initWithType:(DDEmotionInputViewType)type textField:(UITextField *)textField textFieldDelegate:(nullable id<UITextFieldDelegate>)textFieldDelegate;

- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
/**
 camera事件
 */
@property (nonatomic, copy) void (^cameraPressedBlock)(void);

/**
 @事件
 */
@property (nonatomic, copy) void (^atPressedBlock)(void);

/**
 发送事件
 */
@property (nonatomic, copy) void (^sendEmotionBlock)(void);

/**
 表情键盘点击事件
 */
@property (nonatomic, copy) void (^emotionPressedBlock)(NSString *emotion);

/**
 表情键盘删除事件
 */
@property (nonatomic, copy) void (^emotionDeletedBlock)(void);

@end

我自己调用的时候

- (DDEmotionInputView *)inpuview
{
    if (!_inpuview) {
        _inpuview = [[DDEmotionInputView alloc] initWithType:DDEmotionInputViewTypeShowAt textView:self.discussView textViewDelegate:self.discussView.delegate];
        WS(weakSelf);
        _inpuview.atPressedBlock = ^{
            //调用 @ 内容
        };

        _inpuview.emotionPressedBlock = ^(NSString *_Nonnull emotion) {
                NSMutableString * str = [[NSMutableString alloc]initWithString:weakSelf.discussView.text];
                [str appendString:[NSString stringWithFormat:@"%@",emotion]];
                weakSelf.discussView.text =str;
        };

        _inpuview.emotionDeletedBlock = ^{
        };
    }
    return _inpuview;
}

就可以了
效果如下:


6.jpeg
  • @选人部分
    点击@ 跳转选人页面


    7.jpeg

这个选人界面也是工程原有的功能,具体代码就不赘述了,里面都是测试账号,名字奇怪,无需介意,😝。
选完人,点击确定会返回,并且带回选中的人的数组。

- (void)atVCmake:(AtSelectType)type
{
    DD_ContactSelect_VC *vc = [[DD_ContactSelect_VC alloc] init];
    vc.selectModel.maxCount = COMPANY_DEFAULT_USERCOUNT;
    vc.title = @"提醒谁看";
    vc.navigationController.title = @"提醒谁看";
    @CuteWS(self);
    @CuteWS(vc);
    vc.selectedFinishBlock = ^(NSArray *selectedArray) {
        //就是这个数组  selectedArray
        [vcWeak.navigationController popToViewController:self animated:YES];
        return YES;
    };

    [self.navigationController pushViewController:vc animated:YES];
}

那么接下来就需要把@选人界面带过来的人加入输入框,并且记住都带了谁过来,以便给他发私信啊。

    //这里选过的人,怕是还会被选中,所以这里弄了一个去重 防止重复添加某一个人 导致    @某人 好几次
       NSMutableArray *norepeatArr = [[NSMutableArray alloc] init];
            for (Person *person in selectedArray) {
                if ([selfWeak.aLLNameArray containsObject:person]) {
                } else {
                    [selfWeak.aLLNameArray addObject:person];
                    [norepeatArr addObject:person];
                }
            }

            if (norepeatArr.count > 0) {
                [selfWeak atStringAppendingWithArray:norepeatArr];
            }
        }

所以接下来关键了 怎么把这个@加到textView中,并且具有@的特性,就是可以一下删掉,高亮等等。

请看下集...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,079评论 4 62
  • 背景: 最近公司的新的需求,需要在一个人的文章列表中,实现转发功能,并且能够实现@someone 。设计图如下: ...
    化二缺阅读 376评论 0 3
  • 泪浸入流风, 闲人就看不见你透入心底的痛, 心沉入死海, 洋流便拭不去你宁殇依守的愿。 彼岸清冷的白色花苞已开, ...
    张宇默阅读 342评论 0 1
  • 忘了听说桂花是什么时候的事了,但看到桂花却是到了南方之后,也就这七八年的事儿。翻了翻QQ空间,似乎每年都会为了桂花...
    麦子2008阅读 323评论 11 7
  • 昨晚外出,手机充电,没带在身边。晚上11点多,打开手机,发现有一个未接来电,点开一看,是母亲打来的。这么晚了,母亲...
    陈益鹏阅读 801评论 0 3