iOS _UITextView 例子 及使用

本文介绍了如何使用UITextView创建可编辑的文本区域,并提供了初始化、设置属性及实现键盘控制的示例代码。此外还展示了如何通过代理方法监测文本变化。
需要用到UITextView 不太懂怎么用,只会用UITextField ,自己找了些资料先贴出来最简单例子,然后把一些资料也拿出来方便扩展


#import "RootTwoController.h"

@interface RootTwoController ()<UITextViewDelegate>

// 描述内容
@property (nonatomic, strong) UITextView *descripe;

@end

@implementation RootTwoController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationController.navigationBar.translucent = NO;
    [self addSubViews];
}

- (void)addSubViews
{
    self.view.backgroundColor = [UIColor whiteColor];


    self.descripe = [[UITextView alloc] initWithFrame:(CGRectMake(50, 100, 200, 100))];
    self.descripe.backgroundColor = [UIColor yellowColor];
    self.descripe.scrollEnabled = YES;
    self.descripe.textAlignment = NSTextAlignmentLeft;
    self.descripe.returnKeyType = UIReturnKeyDefault;
    self.descripe.font = [UIFont systemFontOfSize:17];
    self.descripe.layer.masksToBounds = YES;
    self.descripe.layer.cornerRadius = self.descripe.frame.size.width / 50;
    self.descripe.delegate = self;

    self.descripe.layer.borderColor = [[UIColor grayColor] CGColor];
    self.descripe.layer.borderWidth = 1;
    [self.view addSubview: self.descripe];

}

- (void)textViewDidChange:(UITextView *)textView
{
    NSLog(@"%@", self.descripe.text);
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 回收键盘 点击空白处
    [self.descripe resignFirstResponder];
}


搜集的一些资料作为扩展内容:


//初始化并定义大小   
 UITextView *textview = [[UITextView alloc] initWithFrame:CGRectMake(20, 10, 280, 30)];
    textview.backgroundColor=[UIColor whiteColor]; //背景色
    textview.scrollEnabled = NO;    //当文字超过视图的边框时是否允许滑动,默认为“YES”
    textview.editable = YES;        //是否允许编辑内容,默认为“YES”
    textview.delegate = self;       //设置代理方法的实现类
    textview.font=[UIFont fontWithName:@"Arial" size:18.0]; //设置字体名字和字体大小;
    textview.returnKeyType = UIReturnKeyDefault;//return键的类型
    textview.keyboardType = UIKeyboardTypeDefault;//键盘类型
    textview.textAlignment = NSTextAlignmentLeft; //文本显示的位置默认为居左
    textview.dataDetectorTypes = UIDataDetectorTypeAll; //显示数据类型的连接模式(如电话号码、网址、地址等)
    textview.textColor = [UIColor blackColor];
    textview.text = @"UITextView详解";//设置显示的文本内容
    [self.view addSubview:textview];

UITextView的代理方法如下:
//将要开始编辑
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;

//将要结束编辑
- (BOOL)textViewShouldEndEditing:(UITextView *)textView;

//开始编辑
- (void)textViewDidBeginEditing:(UITextView *)textView;

//结束编辑
- (void)textViewDidEndEditing:(UITextView *)textView;

//内容将要发生改变编辑
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

//内容发生改变编辑
- (void)textViewDidChange:(UITextView *)textView;

//焦点发生改变
- (void)textViewDidChangeSelection:(UITextView *)textView;

有时候我们要控件自适应输入的文本的内容的高度,只要在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>=100)
    {
        //控制输入文本的长度
        return  NO;
    }
    if ([text isEqualToString:@"\n"]) {
        //禁止输入换行
        return NO;
    }
    else
    {
        return YES;
    }
}


UITextView退出键盘的几种方式
因为iphone的软键盘没有自带的退键盘键,所以要实现退出键盘需要自己实现,有如下几种方式:
1)如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实UITextViewDelegate。

- (void)textViewDidBeginEditing:(UITextView *)textView {

    UIBarButtonItem *done =    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                             target:self
                                                                             action:@selector(dismissKeyBoard)];

    self.navigationItem.rightBarButtonItem = done;

    [done release];
    done = nil;

}

- (void)textViewDidEndEditing:(UITextView *)textView {  
    self.navigationItem.rightBarButtonItem = nil;   
}

- (void)dismissKeyBoard {   
    [self.textView resignFirstResponder];  
}


2)如果你的textview里不用回车键,可以把回车键当做退出键盘的响应键。
代码如下:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}




3)还有你也可以自定义其他加载键盘上面用来退出,比如在弹出的键盘上面加一个view来放置退出键盘的Done按钮。
代码如下:


    UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)];
    [topView setBarStyle:UIBarStyleBlack];

    UIBarButtonItem *btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                             target:self
                                                                             action:nil];

    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done"
                                                                 style:UIBarButtonItemStyleDone
                                                                 target:self
                                                                action:@selector(dismissKeyBoard)];

    NSArray * buttonsArray = @[btnSpace, doneButton];;
    [doneButton release];
    [btnSpace release];
    [topView setItems:buttonsArray];
    [textView setInputAccessoryView:topView];//当文本输入框加上topView
    [topView release];
    topView = nil;

-(IBAction)dismissKeyBoard
{
    [tvTextView resignFirstResponder];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值