基础控件-->>UITextView详解
2016-09-21 本文已影响7779人
MrBrave丶彬彬
继基础控件UITextField之后,期待的UITextView详细介绍-->>保证你有意外收获,如有问题欢迎指点。。
1、UITextView相关属性
#######效果
UITextView.png#######代码
// 初始化输入框并设置位置和大小
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 100, [UIScreen mainScreen].bounds.size.width - 20, 180)];
// 设置预设文本
textView.text = @"您的意见是我们前进的最大动力,谢谢!";
// 设置文本字体
textView.font = [UIFont fontWithName:@"Arial" size:16.5f];
// 设置文本颜色
textView.textColor = [UIColor colorWithRed:51/255.0f green:51/255.0f blue:51/255.0f alpha:1.0f];
// 设置文本框背景颜色
textView.backgroundColor = [UIColor whiteColor];
// 设置文本对齐方式
textView.textAlignment = NSTextAlignmentLeft;
// 设置自动纠错方式
textView.autocorrectionType = UITextAutocorrectionTypeNo;
//外框
textView.layer.borderColor = [UIColor redColor].CGColor;
textView.layer.borderWidth = 1;
textView.layer.cornerRadius =5;
// 设置自动大写方式
textView.autocapitalizationType = UITextAutocapitalizationTypeNone;
// 自动大写方式有以下几种:
// enum {
// UITextAutocapitalizationTypeNone, 不自动大写
// UITextAutocapitalizationTypeWords, 单词首字母大写
// UITextAutocapitalizationTypeSentences, 句子的首字母大写
// UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
// } UITextAutocapitalizationType;
// 设置键盘的样式
textView.keyboardType = UIKeyboardTypeDefault;
// 键盘样式有以下几种:
// enum {
// UIKeyboardTypeDefault, 默认键盘,支持所有字符
// UIKeyboardTypeASCIICapable, 支持ASCII的默认键盘
// UIKeyboardTypeNumbersAndPunctuation, 标准电话键盘,支持+*#字符
// UIKeyboardTypeURL, 只支持URL字符的URL键盘,支持.com按钮
// UIKeyboardTypeNumberPad, 数字键盘
// UIKeyboardTypePhonePad, 电话键盘
// UIKeyboardTypeNamePhonePad, 支持输入人名的电话键盘
// UIKeyboardTypeEmailAddress, 电子邮件键盘
// UIKeyboardTypeDecimalPad, 有数字和小数点的数字键盘
// UIKeyboardTypeTwitter, 优化的键盘,方便输入@、#字符
// UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
// } UIKeyboardType;
// 设置return键样式
textView.returnKeyType = UIReturnKeyDefault;
// return键有以下几种样式:
// enum {
// UIReturnKeyDefault, 默认,灰色按钮,标有Return
// UIReturnKeyGo, 标有Go的蓝色按钮
// UIReturnKeyGoogle, 标有Google的蓝色按钮,用于搜索
// UIReturnKeyJoin, 标有Join的蓝色按钮
// UIReturnKeyNext, 标有Next的蓝色按钮
// UIReturnKeyRoute, 标有Route的蓝色按钮
// UIReturnKeySearch, 标有Search的蓝色按钮
// UIReturnKeySend, 标有Send的蓝色按钮
// UIReturnKeyYahoo, 标有Yahoo的蓝色按钮
// UIReturnKeyYahoo, 标有Yahoo的蓝色按钮
// UIReturnKeyEmergencyCall, 紧急呼叫按钮
// } UIReturnKeyType;
// 设置是否可以拖动
textView.scrollEnabled = YES;
// 设置代理
textView.delegate = self;
//自适应高度
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
// 自定义文本框字数统计
count = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width - 100, CGRectGetMaxY(textView.frame) +5, 60, 20)];
count.text = @"0/100";
count.textAlignment = NSTextAlignmentRight;
count.font = [UIFont fontWithName:@"Arial" size:15.0f];
count.backgroundColor = [UIColor clearColor];
count.textColor = [UIColor redColor];
count.enabled = NO;
[self.view addSubview:count];
[self.view addSubview:textView];
1、UITextView相关代理
/**
将要开始编辑
@param textView textView
@return BOOL
*/
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
return YES;
}
/**
开始编辑
@param textView textView
*/
- (void)textViewDidBeginEditing:(UITextView *)textView
{
if ([textView.text isEqualToString:@"您的意见是我们前进的最大动力,谢谢!"]) {
textView.text = @"";
}
}
/**
将要结束编辑
@param textView textView
@return BOOL
*/
- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
return YES;
}
/**
结束编辑
@param textView textView
*/
-(void)textViewDidEndEditing:(UITextView *)textView
{
if (textView.text.length <1) {
textView.text = @"您的意见是我们前进的最大动力,谢谢!";
}
}
/**
内容将要发生改变编辑 限制输入文本长度 监听TextView 点击了ReturnKey 按钮
@param textView textView
@param range 范围
@param text text
@return BOOL
*/
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if (range.location < 100)
{
return YES;
} else if ([textView.text isEqualToString:@"\n"]) {
//这里写按了ReturnKey 按钮后的代码
return NO;
}
if (textView.text.length == 100) {
return NO;
}
return YES;
}
/**
内容发生改变编辑 自定义文本框placeholder
有时候我们要控件自适应输入的文本的内容的高度,只要在textViewDidChange的代理方法中加入调整控件大小的代理即可
@param textView textView
*/
- (void)textViewDidChange:(UITextView *)textView
{
count.text = [NSString stringWithFormat:@"%lu/100", textView.text.length ];
}
注释
用过TextView的童鞋都知道TextView是没有 placeholder 上面的做法是利用textView的text做了一个placeholder 但是效果不是很好。。一开始进入这个页面可以看到 placeholder 的提示 但是写了以后 删除所有数据 此时为空了 但是placeholder 不显示了 这个只适用于第一次显示 不好 下面要实现和textField 一样的需要自己重新继承TextView 写一个 。。代码如下--有兴趣的童鞋可以了解下 TextViewGitHubDemo
#######TextView 自定义的带placeholder 效果
1.gif#######TextView 自定义的带placeholder 代码 继承TextView .H
#import <UIKit/UIKit.h>
@interface CBBTextView : UITextView
@property(nonatomic) UILabel *placeHolderLabel;
@property(nonatomic) NSString *placeholder;
@property(nonatomic) UIColor *placeholderColor;
@end
#######TextView 自定义的带placeholder 代码 继承TextView .M
#import "CBBTextView.h"
@implementation CBBTextView
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setUpSubViews];
}
return self;
}
- (void)setUpSubViews
{
self.text = @"";
[self setPlaceholder:@""];
[self setPlaceholderColor:[UIColor lightGrayColor]];
}
- (void)setText:(NSString *)text {
[super setText:text];
}
- (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 = UILineBreakModeWordWrap;
_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];
}
}
@end
#######TextView 自定义的带placeholder 代码 控制器
#import "ViewController.h"
#import "CBBTextView.h"
@interface ViewController ()<UITextViewDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CBBTextView * textView =[[CBBTextView alloc] initWithFrame:CGRectMake(10, 100, [UIScreen mainScreen].bounds.size.width - 20, 180)];
textView.backgroundColor = [UIColor whiteColor];
textView.placeholderColor = [UIColor lightGrayColor];
textView.placeholder = @"您的意见是我们前进的最大动力,谢谢!";
textView.font = [UIFont systemFontOfSize:17];
textView.delegate = self;
textView.layer.borderWidth =1;
textView.layer.borderColor =[UIColor redColor].CGColor;
[textView.layer setCornerRadius:10.0f];
[self.view addSubview:textView];
}
- (void)textViewDidChange:(CBBTextView *)textView
{
if([textView.placeholder length] == 0)
{
return;
}
if([textView.placeholder length] == 0)
{
[textView.placeHolderLabel setAlpha:1];
}
else
{
[textView.placeHolderLabel setAlpha:0];
}
if ([textView.text isEqualToString:@""]) {
[textView.placeHolderLabel setAlpha:1];
}
}
@end
未完待续。。