#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:@" "]) { [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