#import "MainViewController.h"
@interface MainViewController () <UITextViewDelegate>
@property(nonatomic,retain) UITextView *textView;
@property(nonatomic,retain) UIButton *btn;
@property(nonatomic,retain) UIView *commentView;
@end
@implementation MainViewController
/*UITextView与UITextField的区别:
输入多行 可以滚动显示浏览全文
软件简介、内容详情显示、小说阅读显示、发表空间内容输入、说说文本框、评论文本框等
UITextView的使用有它本身的代理方法,也有继承于父类的方法。
本身的方法监听: 开始编辑 -------> 结束编辑 类似UITextField
主要继承于UIScrollView的方法
*/
/*
继承自:UIScrollView : UIView : UIResponder : NSObject
必须先实现UITextViewDelegate协议,都是optional修饰
关键步骤:
1.设置代理
2.字体大小
3.添加滚动区域
4.是否滚动
5.获得焦点
轻松搞定frame:⚡️
CGRectGetMinX(CGRect rect):指定控件的frame.origin.x
CGRectGetMidX(CGRect rect):指定控件的frame.origin.x + frame.size.width / 2
CGRectGetMaxX(CGRect rect):指定控件的frame.origin.x + frame.size.width
CGRectGetWidth(CGRect rect):指定控件的frame.size.width
*/
#pragma mark -结束加载-
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
self.navigationItem.title = @"UITextView的使用";
[self setUpView];
#pragma mark ===监听键盘状态:打开或关闭===
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardHide:) name:UIKeyboardWillHideNotification object:nil];
}
#pragma mark -打开键盘-
-(void)keyboardShow:(NSNotification *)note
{
CGRect keyBoardRect=[note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
// 获取键盘的高度
CGFloat deltaY=keyBoardRect.size.height;
[UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{
_commentView.transform=CGAffineTransformMakeTranslation(0, -deltaY);
}];
}
#pragma mark -关闭键盘-
-(void)keyboardHide:(NSNotification *)note
{
[UIView animateWithDuration:[note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{
// 还原设置
_commentView.transform=CGAffineTransformIdentity;
} completion:^(BOOL finished) {
// 支付宝密码输入
// _textView.text=@"";
// [_commentView removeFromSuperview];
}];
}
#pragma mark ======布局视图=====
- (void)setUpView{
#pragma mark -UIView视图上放置textView-
self.commentView = [[UIView alloc]initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 50, [UIScreen mainScreen].bounds.size.width, 50)];
[self.view addSubview:_commentView];
_commentView.backgroundColor = [UIColor colorWithRed:204 / 255.0 green:230 / 255.0 blue:1.0 alpha:1.0];
[_commentView release];
NSLog(@"%f", [UIScreen mainScreen].bounds.size.height);
#pragma mark -textView-
self.textView = [[UITextView alloc]initWithFrame:CGRectMake(20, 10, [UIScreen mainScreen].bounds.size.width - 175, 30)];
_textView.layer.cornerRadius = 8;
_textView.layer.borderColor = [UIColor blueColor].CGColor;
_textView.layer.borderWidth = 1;
_textView.bounces = NO;
_textView.contentOffset = CGPointMake(CGRectGetMinX(_textView.frame) + 10, 10);
#pragma mark -关键步骤-
//设置代理
_textView.delegate = self;
//是否可编辑
_textView.editable = YES;
//是否允许滚动,默认是一行
_textView.scrollEnabled = YES;
//字体大小
_textView.font = [UIFont systemFontOfSize:15];
//显示位置默认居左
_textView.textAlignment = NSTextAlignmentLeft;
//键盘类型
_textView.keyboardType = UIKeyboardTypeDefault;
#pragma mark ===可输入内容区域===
//选中范围
// _textView.selectedRange = NSMakeRange(0, 3);
//获得焦点, 即运行程序textView处于开始编辑状态
// [_textView becomeFirstResponder];
//有导航栏时,输入文本会下移,修复方法‼️‼️
self.automaticallyAdjustsScrollViewInsets = NO;
//选中区域
// [_textView scrollRangeToVisible:_textView.selectedRange];
#pragma mark -实现placeholder功能的猥琐方法-
_textView.text = @"请输入内容";
_textView.textColor = [UIColor grayColor];
#pragma ==数据类型检测==
/*
检测出来的是类型用浅蓝色显示
注意:editable设置为NO
*/
// _textView.editable = NO;
// _textView.dataDetectorTypes = UIDataDetectorTypeAll;
// _textView.text = @"我的手机号是:132 4567 9841,我的博客是: www.baidu.com, 我的邮箱是:zoujianguo130@163.com";
[_commentView addSubview:_textView];
[_textView release];
#pragma mark -按钮-
self.btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
_btn.frame = CGRectMake(CGRectGetMaxX(_textView.frame) + 15, CGRectGetMinY(_textView.frame), 100, 30);
_btn.layer.cornerRadius = 8;
_btn.backgroundColor = [UIColor colorWithRed:0.0 green:184 / 255.0 blue:245 / 255.0 alpha:1.0];
[_btn setTitle:@"提交" forState:UIControlStateNormal];
[_btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[_commentView addSubview:_btn];
[self.btn addTarget:self action:@selector(handleSubmmit:) forControlEvents:UIControlEventTouchUpInside];
}
#pragma mark -提交按钮的单击事件-
- (void)handleSubmmit:(UIButton *)sender{
}
#pragma mark -UITextViewDelegate中可选择实现方法-
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
NSLog(@"将要开始编辑");
#pragma -placeholder功能-
if ([_textView.text isEqual:@"请输入内容"]) {
_textView.text = @"";
_textView.textColor = [UIColor blackColor];
}
return YES;
}
- (BOOL)textViewShouldEndEditing:(UITextView *)textView{
NSLog(@"将要结束编辑");
return YES;
}
- (void)textViewDidBeginEditing:(UITextView *)textView{
NSLog(@"开始编辑。。。");
}
- (void)textViewDidEndEditing:(UITextView *)textView{
NSLog(@"编辑结束。。。");
#pragma mark -placeholder功能-
if (_textView.text.length < 1) {
_textView.text = @"请输入内容";
_textView.textColor = [UIColor grayColor];
}
}
#pragma mark -是否允许修改内容-
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
#pragma ====控制输入长度❗️====
// if (range.location >= 6)
// {
// UIAlertView * alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"您已输入6个字" delegate:nil cancelButtonTitle:@"返回" otherButtonTitles: nil];
// [alert show];
// [alert release];
// }
// else
// {
// return YES;
// }
//判断键盘是否有选中的内容,即禁止输入换行
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
NSLog(@"将要改变内容");
return YES;
}
//内容改变时才触发,必须手动输入有效
- (void)textViewDidChange:(UITextView *)textView{
#pragma ==✅控制输入长度==(不能准确的识别中文的长度)
// if (textView.text.length >= 6) {
// textView.text = [textView.text substringToIndex:6];
// UIAlertView * alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"您已输入6个字" delegate:nil cancelButtonTitle:@"返回" otherButtonTitles: nil];
// [alert show];
// [alert release];
// }
NSLog(@"内容已经更改。。。");
}
//几乎所有操作都会触发,如:点击文本框,增加内容,删除内容。。。
//可以理解为只要和selectedRange有关都会触发(位置和长度)
- (void)textViewDidChangeSelection:(UITextView *)textView{
NSLog(@"选中内容 (焦点发生改变)");
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
return YES;
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange {
return YES;
}
#pragma mark -单击空白处回收键盘-
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[self.textView resignFirstResponder];
}
#pragma mark -return回收键盘-
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
return YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
UITextView demo