博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS自定义发送消息输入框
阅读量:6701 次
发布时间:2019-06-25

本文共 5629 字,大约阅读时间需要 18 分钟。

简单的封装了一个,免得麻烦直接初始化就可以用了 ,有其他需求该里面参数就行了

WJEasyInputTextView.h

//
//
  WJEasyInputTextView.h
//
  键盘上的输入框
//
//
  Created by apple on 15/6/23.
//
  Copyright (c) 2015年 tqh. All rights reserved.
//
#import <UIKit/UIKit.h>
/*
*
 *  使用 直接初始化,也可以改属性
 WJEasyInputTextView *wj = [[WJEasyInputTextView alloc]init];
 wj.bgColor = [UIColor orangeColor];
 wj.showLimitNum = YES;
 wj.font = [UIFont systemFontOfSize:18];
 wj.limitNum = 13;
 [self.view addSubview:wj];
 
*/
@interface WJEasyInputTextView : UIView
@property (nonatomic,strong)UIColor *bgColor;   
//
背景色
@property (nonatomic,assign)BOOL showLimitNum; 
//
显示字数
@property (nonatomic,assign)NSInteger limitNum; 
//
限制字数
@property (nonatomic,strong)UIFont *font;       
//
文字大小
@end

 WJEasyInputTextView.m

//
//
  WJEasyInputTextView.m
//
  键盘上的输入框
//
//
  Created by apple on 15/6/23.
//
  Copyright (c) 2015年 tqh. All rights reserved.
//
#import 
"
WJEasyInputTextView.h
"
@interface WJEasyInputTextView ()<UITextViewDelegate> {
    UIView *_bottomView;
//
评论框
    UITextView *_textView;
//
输入框
    UILabel *_textApl;
//
字数
    CGRect _rect;
}
@end
@implementation WJEasyInputTextView
- (instancetype)init
{
    self = [super init];
    
if (self) {
        self.frame = CGRectMake(
0, CGRectGetHeight([UIScreen mainScreen].bounds)-
50, CGRectGetWidth([UIScreen mainScreen].bounds), 
50);
        _rect = self.frame;
        [self initNotification];
        [self AddtextFieldComments];
    }
    
return self;
}
#pragma mark - 初始化键盘监听
- (
void)initNotification {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification 
object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification 
object:nil];
}
#pragma mark - 初始化视图
- (
void)AddtextFieldComments  {
    _bottomView = [[UIView alloc] initWithFrame:self.bounds];
    _bottomView.backgroundColor = self.bgColor;
    _bottomView.userInteractionEnabled= YES;
    [self addSubview:_bottomView];
    
    UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(
0
0, CGRectGetWidth(self.bounds), 
0.5)];
    lineView.backgroundColor = [UIColor colorWithWhite:
0.6 alpha:
0.3];
    [_bottomView addSubview:lineView];
    
    _textView = [[UITextView alloc] initWithFrame:CGRectMake(
15
5, CGRectGetWidth(self.bounds) - 
115
40)];
    _textView.layer.cornerRadius = 
6;
    _textView.layer.borderWidth = 
1;
    _textView.
delegate = self;
    _textView.font = [UIFont systemFontOfSize:
13];
    _textView.autocapitalizationType = UITextAutocapitalizationTypeNone;
    _textView.autocorrectionType = UITextAutocorrectionTypeNo;
    _textView.layer.borderColor = lineView.backgroundColor.CGColor;
    [_bottomView addSubview:_textView];
    
    _textApl = [[UILabel alloc] init];
    _textApl.frame = CGRectMake(CGRectGetMaxX(_textView.frame)-
37
35
30
6);
    _textApl.textColor = [UIColor grayColor];
    _textApl.textAlignment = NSTextAlignmentRight;
    _textApl.font = [UIFont systemFontOfSize:
8];
//
    _textApl.text = @"140";
    [_bottomView addSubview:_textApl];
    
    UIButton *plBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    plBtn.layer.borderWidth = 
1;
    plBtn.backgroundColor = [UIColor whiteColor];
    [plBtn setTitle:
@"
发送
" forState:UIControlStateNormal];
    [plBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    plBtn.layer.cornerRadius = 
6;
    plBtn.layer.borderColor = lineView.backgroundColor.CGColor;
    plBtn.frame = CGRectMake(CGRectGetMaxX(_textView.frame) + 
10, CGRectGetMinY(_textView.frame), 
80, CGRectGetHeight(_textView.frame));
    [plBtn addTarget:self action:@selector(pinglun) forControlEvents:UIControlEventTouchUpInside];
    [_bottomView addSubview:plBtn];
}
#pragma mark - get方法
- (
void)setBgColor:(UIColor *)bgColor {
    _bgColor = bgColor;
    _bottomView.backgroundColor = bgColor;
}
- (
void)setLimitNum:(NSInteger)limitNum {
    NSLog(
@"
%ld
",limitNum);
    _limitNum = limitNum;
    _textApl.text = [NSString stringWithFormat:
@"
%ld
",limitNum];
}
- (
void)setShowLimitNum:(BOOL)showLimitNum {
    _showLimitNum = showLimitNum;
    
if (showLimitNum) {
        _textApl.hidden = NO;
    }
else {
        _textApl.hidden = YES;
    }
}
- (
void)setFont:(UIFont *)font {
    _font = font;
    _textView.font = font;
}
#pragma mark - 事件监听
- (
void)pinglun
{
    NSLog(
@"
发送
");
}
- (
void)textViewDidChange:(UITextView *)textView {
    
if (_showLimitNum) {
        NSString *toBeString = textView.text;
        NSArray *currentar = [UITextInputMode activeInputModes];
        UITextInputMode *current = [currentar firstObject];
        
        
//
下面的方法是iOS7被废弃的,注释
        
//
    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; 
//
 键盘输入模式
        
        
if ([current.primaryLanguage isEqualToString:
@"
zh-Hans
"]) { 
//
 简体中文输入,包括简体拼音,健体五笔,简体手写
            UITextRange *selectedRange = [textView markedTextRange];
            
//
获取高亮部分
            UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:
0];
            
//
 没有高亮选择的字,则对已输入的文字进行字数统计和限制
            
if (!position) {
                
if (toBeString.length > _limitNum) {
                    textView.text = [toBeString substringToIndex:_limitNum];
                }
            }
            
//
 有高亮选择的字符串,则暂不对文字进行统计和限制
            
else{
                
            }
        }
        
//
 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        
else{
            
if (toBeString.length > _limitNum) {
                textView.text = [toBeString substringToIndex:_limitNum];
            }
        }
        NSLog(
@"
%@
",textView.text);
    }
else {
        
    }
}
#pragma mark - 键盘监听
- (
void)keyboardWillShow:(NSNotification *)notification
{
    
//
得到键盘高度
    NSDictionary *userInfo = [notification userInfo];
    NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [aValue CGRectValue];
    
//
 - 49
    self.frame = CGRectMake(
0, CGRectGetHeight([UIScreen mainScreen].bounds) - keyboardRect.size.height - 
50, CGRectGetWidth(_bottomView.frame), CGRectGetHeight(_bottomView.frame));
    
}
- (
void)keyboardWillHide:(NSNotification *)notification
{
    
//
-49
    self.frame = _rect;
}
@end

效果图:

 

转载于:https://www.cnblogs.com/hxwj/p/4595122.html

你可能感兴趣的文章
mysql中如何实现row_number
查看>>
Mandiant对APT1组织的***行动的情报分析报告
查看>>
cocos2d-x 3.x取消dumpCachedTextureInfo代之以getCachedTextureInfo
查看>>
专访:混合云的发展趋势
查看>>
我的第一篇Windows Live Writer小文
查看>>
在Mac上安装mysql数据库记录
查看>>
你的SDN只是一场学术笑话?
查看>>
《统一沟通-微软-实战》-1-部署-基础环境-1-DC DNS
查看>>
烂泥:FTP计划任务下载
查看>>
Lync日常维护之二:批量修改用户所属SIP域
查看>>
演示:OSPF的邻居关系故障分析与排除
查看>>
docker高级应用之集群与auto scale
查看>>
SQL Server各个版本之间的差异
查看>>
Mysql高性能备份方案解决数据不间断访问(LVM快照方式备份)
查看>>
Hyper-V 3.0服务器虚拟化:打造坚固的云
查看>>
【VMware虚拟化解决方案】中小企业组建vSphere虚拟化数据中心的一点经验
查看>>
利用某游戏视频热门评论引流操作CPA
查看>>
关于node.js的web框架的应用及并发性能测试
查看>>
数据库性能优化-摘录
查看>>
JS Documemt createElement
查看>>