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:@"\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
View Code UITextView 学习代码

 

转载于:https://www.cnblogs.com/benpaobadaniu/p/4812234.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值