UITextView的基本用法
参考:http://blog.sina.com.cn/s/blog_9693f61a0101aode.html
https://www.jianshu.com/p/dffa59bc490b
1. TextView简单属性
继承于UIScrollView,所以它具有UIScrollView的属性和方法。
//初始化UITextView
UITextView *textview = [[UITextView alloc]initWithFrame:CGRectMake(100, 100, 300, 44)];
textview.backgroundColor = [UIColor blueColor]; //设置背景色
//设置当文字超过视图的边框时是否允许滑动,默认为“YES”
textview.scrollEnabled = NO;
//设置是否允许编辑内容,默认为“YES”
textview.editable = YES;
//设置代理方法的实现类
textview.delegate = self;
//设置显示文字颜色,设置字体名字和字体大小
textview.textColor = [UIColor blackColor];
textview.font = [UIFont fontWithName:@"Arial" size:18.0];
//设置return键的类型
textview.returnKeyType = UIReturnKeyDefault;
//设置键盘类型一般为默认
textview.keyboardType = UIKeyboardTypeDefault;
//文本显示的位置默认为居左
textview.textAlignment = NSTextAlignmentLeft;
//显示数据类型的连接模式(如电话号码、网址、地址等)
textview.dataDetectorTypes = UIDataDetectorTypeAll;
//自适应高度
self.textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
//设置显示的文本内容
//
选中范围
textView.selectedRange = NSMakeRange(8, 6);
textview.text = @"UITextView详解";
[self.view addSubview:textview];
2.TextView的代理方法
#pragma mark - UITextViewDelegate协议中的方法
//将要进入编辑模式[开始编辑]
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{return YES;}
//已经进入编辑模式
- (void)textViewDidBeginEditing:(UITextView *)textView {}
//将要结束/退出编辑模式
- (BOOL)textViewShouldEndEditing:(UITextView *)textView {return YES;}
//已经结束/退出编辑模式
- (void)textViewDidEndEditing:(UITextView *)textView {}
//当textView的内容发生改变的时候调用
- (void)textViewDidChange:(UITextView *)textView {}
//选中textView 或者输入内容的时候调用[焦点发生改变]
- (void)textViewDidChangeSelection:(UITextView *)textView {}
//从键盘上将要输入到textView 的时候调用 [内容将要发生改变编辑]
//rangge 光标的位置
//text 将要输入的内容
//返回YES 可以输入到textView中 NO不能
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {return YES;}
3. 代理方法解决相关问题
//控件自适应输入的文本的内容的高度,只要在textViewDidChange的代理方法中加入调整控件大小的代理即可
- (void)textViewDidChange:(UITextView *)textView{
//计算文本的高度
CGSize constraintSize;
constraintSize.width = textView.frame.size.width-16;
constraintSize.height = MAXFLOAT;
CGSize sizeFrame =[textView.text sizeWithFont:textView.font
constrainedToSize:constraintSize
lineBreakMode:UILineBreakModeWordWrap];
//重新调整textView的高度
textView.frame = CGRectMake(textView.frame.origin.x,textView.frame.origin.y,textView.frame.size.width,sizeFrame.height+5);
}
// 控制输入文字的长度和内容,可调用一下方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if (range.location>=32)
{
//控制输入文本的长度
return NO;
}
if ([text isEqualToString:@"\n"]) {
//禁止输入换行
return NO;
}
else
{
return YES;
}
}
UITextVIew的限制数字的Demo->输入金额Demo
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//string就是此时输入的那个字符 textField就是此时正在输入的那个输入框 返回YES就是可以改变输入框的值 NO相反
if ([string isEqualToString:@"\n"]) //按会车可以改变
{
return YES;
}
//得到输入框的内容
NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (self.tf_signsum == textField) //判断是否是我们想要限定的那个输入框
{
// 判断首位不能为零
if (toBeString.length > 0) {
if ([toBeString doubleValue] == 0) {
//判断首位不能为零
return NO;
}
}
if (![self validateNumber:toBeString]) {
//提示请输入数字
return NO;
}
if ([toBeString length] > 12) { //如果输入框内容大于12则弹出警告
textField.text = [toBeString substringToIndex:12];
//最多输入12位
return NO;
}
self.lb_AmountInwords.text = [XHTConversionStringTools stringWithAmountInwords:toBeString];
}
if (self.tf_remark == textField) //判断是否时我们想要限定的那个输入框
{
if ([toBeString length] > 30) { //如果输入框内容大于20则弹出警告
textField.text = [toBeString substringToIndex:30];
[UIToastView showToastViewWithContent:@"最多只能输入30个文字" andRect:KTOASTRECT andTime:1 andObject:self];
return NO;
}
}
return YES;
}
之前看到很多好朋友问到UITextView限制字数,或者限制成只输入数字等,接下来见到了解下UITextView。
- (BOOL)validateNumber:(NSString*)number {
BOOL res = YES;
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
int i = 0;
while (i < number.length) {
NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == 0) {
res = NO;
break;
}
i++;
}
return res;
}
//UITextView退出键盘的方法
//如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用通知来退出键盘,
//略。如果textview里不用回车键,可以把回车键当做退出键盘的响应键。
UITextView: 响应键盘的 return 事件
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]){ //判断输入的字是否是回车,即按下return
//在这里做你响应return键的代码
[textView resignFirstResponder];
return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行
}
return YES;
}
iOS开发中利用runtime设置UITextView的默认文字
_textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 50, [UIScreen mainScreen].bounds.size.width, 200)];
//之前的做法
UILabel *placeholderLabel = [[UILabel alloc] init];
placeholderLabel.text = @"这是默认文字。。。";
placeholderLabel.font = [UIFont systemFontOfSize:15.f];
placeholderLabel.textColor = [UIColor whiteColor];
placeholderLabel.numberOfLines = 0;
[placeholderLabel sizeToFit];
[_textView addSubview:placeholderLabel];
//runtime的做法
[_textView setValue:placeholderLabel forKey:@"_placeholderLabel"];
设置UITextView圆角问题
做法是在 #import QuartzCore/QuartzCore.h 后,便能調用[textView.layer setCornerRadius:10]; 來把 UITextView 设定圓角
3. 扩展
//富文本
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithString:@"这是一个富文本"];
[attrStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:30.0f]
range:NSMakeRange(4, 3)];
textView.attributedText = attrStr;
//是否允许改变文本属性字典
textView.allowsEditingTextAttributes = NO;
NSMutableDictionary * attributesDic = [textView.typingAttributes mutableCopy];
[attributesDic setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName];
// 重新设置 接下来改变的文字 的属性字典
textView.typingAttributes = attributesDic;
/*一般在一些代理函数中使用,比如当编辑状态的变化*/
//输入视图
// 试着改变view的frame,发现只有height值会对视图有影响,只会改变附加视图的高度
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)];
view.backgroundColor = [UIColor redColor];
// 不弹出键盘,弹出添加的这个视图,一般用作像银行app的自定义键盘
textView.inputView = view;
输入键盘附加视图
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 50)];
view.backgroundColor = [UIColor redColor];
// 在键盘上附加一个视图,一般用于添加一个收回键盘的按钮
textView.inputAccessoryView = view;
//获得焦点后选中现有文本,输入内容时清除当前选中文本
textView.clearsOnInsertion = YES; // 默认为NO
//文本内容与边界的间距
textView.textContainerInset = UIEdgeInsetsMake(20, 20, 20, 20);
// 在程序中添加以下通知就可以获得相应的状态事件
// 开始编辑的通知
UIKIT_EXTERN NSString * const UITextViewTextDidBeginEditingNotification;
// 文本发生变化的通知
UIKIT_EXTERN NSString * const UITextViewTextDidChangeNotification;
// 编辑结束的通知
UIKIT_EXTERN NSString * const UITextViewTextDidEndEditingNotification;
网友评论