zoukankan      html  css  js  c++  java
  • UI:UITextView

    #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
    View Code UITextView 学习代码
  • 相关阅读:
    vuex2 mapActions 报错 `unknown action type: xxxx`
    IE报vuex requires a Promise polyfill in this browser问题解决
    vue路由懒加载
    vue-router各个属性的作用及用法
    JS实现继承的几种方法
    ES6学习笔记--promise对象
    jQuery--data()方法
    原生js实现二级联动下拉列表菜单
    sql server中部分函数功能详解
    js中字符串转换为数值的两种方法的区别
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/4812234.html
Copyright © 2011-2022 走看看