自定义textView限制字数

ViewController.m

#import "JYZTextView.h"

#define kTextBorderColor     RGBCOLOR(227,224,216)

 

#undef  RGBCOLOR

#define RGBCOLOR(r,g,b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]

@interface ViewController ()<UITextViewDelegate>

@property(strong, nonatomic)JYZTextView * textView;

@property(strong, nonatomic)UILabel * numLabel;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

//自定义textView

_textView = [[JYZTextView alloc]initWithFrame:CGRectMake(30, 100, self.view.frame.size.width - 60, 100)];

_textView.backgroundColor = [UIColor whiteColor];

_textView.delegate = self;

_textView.font = [UIFont systemFontOfSize:14.f];

_textView.textColor = [UIColor blackColor];

_textView.textAlignment = NSTextAlignmentLeft;

_textView.placeholder = @"请输入大于10少于300百字的评价";

[self.view addSubview:_textView];

_numLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_textView.frame)-90, CGRectGetMaxY(_textView.frame)+6, 80, 21)];

_numLabel.textAlignment = NSTextAlignmentRight;

_numLabel.text = @"300";

_numLabel.backgroundColor = [UIColor whiteColor];

[self.view addSubview:_numLabel];

}

#pragma mark textField的字数限制

//在这个地方计算输入的字数

- (void)textViewDidChange:(UITextView *)textView

{

NSInteger wordCount = textView.text.length;

self.numLabel.text = [NSString stringWithFormat:@"%ld/300",(long)wordCount];

[self wordLimit:textView];

}

#pragma mark 超过300字不能输入

-(BOOL)wordLimit:(UITextView *)text{

if (text.text.length < 300) {

NSLog(@"%ld",text.text.length);

self.textView.editable = YES;

}

else{

self.textView.editable = NO;

}

return nil;

}

JYZTextView.h

@interface JYZTextView : UITextView

@property (nonatomic, strong) UILabel * placeHolderLabel;

@property (nonatomic, copy) NSString * placeholder;

@property (nonatomic, strong) UIColor * placeholderColor;

/**

*  检测当输入时改变字体颜色

*

*  @param notification 监测

*/

- (void)textChanged:(NSNotification * )notification;

JYZTextView.m

-(instancetype)initWithFrame:(CGRect)frame{

if (self = [super initWithFrame:frame]) {

[self setPlaceholder:@""];

[self setPlaceholderColor:[UIColor lightGrayColor]];

self.layer.cornerRadius = 4.0f;

self.layer.borderColor = kTextBorderColor.CGColor;

self.layer.borderWidth = 0.5;

self.placeholderColor = RGBCOLOR(0x89, 0x89, 0x89);

self.editable = YES;

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];

}

return self;

}

-(void)setPlaceholder:(NSString *)placeholder{

if (_placeholder != placeholder) {

_placeholder = placeholder;

[self.placeHolderLabel removeFromSuperview];

self.placeHolderLabel = nil;

[self setNeedsDisplay];

}

}

- (void)textChanged:(NSNotification *)notification{

if ([[self placeholder] length] == 0) {

return;

}

if ([[self text] length] == 0) {

[[self viewWithTag:999] setAlpha:1.0];

}

else{

[[self viewWithTag:999] setAlpha:0];

}

}

-(void)drawRect:(CGRect)rect{

[super drawRect:rect];

if ([[self placeholder] length] > 0) {

if (_placeHolderLabel == nil) {

_placeHolderLabel = [[UILabel alloc]initWithFrame:CGRectMake(8, 8, self.bounds.size.width - 16, 0)];

_placeHolderLabel.lineBreakMode = NSLineBreakByWordWrapping;

_placeHolderLabel.numberOfLines = 0;

_placeHolderLabel.font = self.font;

_placeHolderLabel.backgroundColor = [UIColor clearColor];

_placeHolderLabel.textColor = self.placeholderColor;

_placeHolderLabel.alpha = 0;

_placeHolderLabel.tag = 999;

[self addSubview:_placeHolderLabel];

}

_placeHolderLabel.text = self.placeholder;

[_placeHolderLabel sizeToFit];

[self sendSubviewToBack:_placeHolderLabel];

}

if ([[self text] length] == 0 && [[self placeholder] length] >0) {

[[self viewWithTag:999] setAlpha:1.0];

}

}

时间: 2024-12-08 07:54:15

自定义textView限制字数的相关文章

自定义TextView实现微信动态的全文和收起功能

本示例实现微信朋友圈发布动态后呈现的全文和收起功能. 1,自定义TextView的布局文件——my_text_view.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- 自定义TextView,实现自动的添加全文和收起功能 --> 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

自定义TextView 调用ttf格式字体

自定义TextView 调用ttf格式字体 <strong>将ttf格式文件存放在assets/fonts/下</strong> 注:PC系统字体存放在C:\Windows\Fonts下 import android.content.Context; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; /** * 修改字体 * */ p

Android 自定义TextView实现文本内容自动调整字体大小以适应TextView的大小

最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小 /**   * 自定义TextView,文本内容自动调整字体大小以适应TextView的大小   * @author yzp   */   public class AutoFitTextView extends TextView {       private Paint mTextPaint;       private float mTextSize;          public AutoFitTextView(Context

自定义TextView使之具有跑马灯的效果

一.问题的引入 使用普通的textview跑马的效果,一开始没有焦点事件不会进行滚动,button有焦点事件,但是比较难看,因此需要自定一个TextView 一出生就有焦点 然后需要自定义一个textview FocusedTextView.java package com.xuliugen.mobilesafe.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Vi

Android开发学习笔记-自定义TextView属性模版

如果项目中有很多个控件使用的是同一种样式,则为了方便,可以将样式设置到系统中去,这样使用的时候会方便很多. 下面是自定义样式模版的方法. 1.在style.xml文件中添加自己要设置的样式内容 <resources> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devic

练习,自定义TextView(1.1)

重新自定义TextView是非常有趣的事情,跟着Android4高级编程,通过自定义TextView,来敲一下代码: 这个是那么的简单,自定义TextView,新建CustomTextView继承TextView public class CustomTextView extends TextView { private Paint marginPaint; private Paint linePaint; private int paperColor; private float margin

自定义TextView带有各类.ttf字体的TextView

最近项目遇到了将普通文字转化为带有字体样式的文字,这里就涉及到了.ttf文件,我上网百度了不少资料最终终于实现了,现在想想其实并不复杂 1,你需要下载一种.ttf字体文件,你可以从网上找到一种字体的.ttf 文件,放在assets中,比如取名为ll.ttf 2.下面我们可以自定义TextView了,比较简单,设置一下我们导入的.ttf文件即可 1 public class FontsTextView extends android.support.v7.widget.AppCompatTextV

Android之——自定义TextView

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47082241 在这一篇博文中,将向大家介绍如何以最简单的方式,来自定义Android中的控件,下面我们以自定义TextView为例来向大家介绍如何自定义Android中的控件. 首先,我们来简单说一下Android中自定义控件的原理:创建一个类,继承要自定义的控件类,重写父类的相关方法即可.原理说完了,是不是很简单呢?下面,我们就一起来自定义一个TextView控件吧. 1.创建

Android中自定义TextView的样式

Android自定义TextView的样式,改变背景颜色,边框粗细和颜色,角的弧度等 在res/drawable文件夹下新建一个dd.xml文件,建一个shap,在里面添加需要改变的内容 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ef0909"></solid>//设置背景色 <strok