1.创建并初始化

UITextView文本视图相比与UITextField直观的区别就是UITextView可以输入多行文字并且可以滚动显示浏览全文。UITextField的用处多,UITextView的用法也不少。常见UITextView使用在APP的软件简介、内容详情显示、小说阅读显示、发表空间内容输入、说说文本框、评论文本框等。UITextView的使用有它本身的代理方法,也有继承于父类的方法。本身的方法有从开始编辑到结束编辑的整个过程的监听,继承的方法主要是继承于UIScrollView的方法,因为关于滚动的控制都属于UIScrollView的。根据常用经验,个人添加了在有导航栏的情况下可能输入文本框是下移的修复方法和添加文字时内容显示自动滚动到UITextView底部的实现方法。

创建UITextView的文件,并在.h文件中写入如下代码:

[csharp] view
plain
copy

 
  1. #import <UIKit/UIKit.h>
  2. @interface TextViewController : UIViewController <UITextViewDelegate>
  3. @property (nonatomic, retain) UITextView *textView;
  4. @end

在.m文件中初始化这个textview,写入代码如下:

[csharp] view
plain
copy

 
  1. self.textView =
    [[UITextView alloc] initWithFrame:self.view.frame]; //初始化大小并自动释放
  2. self.textView.textColor = [UIColor blackColor];//设置textview里面的字体颜色
  3. self.textView.font = [UIFont fontWithName:@"Arial" size:18.0];//设置字体名字和字体大小
  4. self.textView.delegate = self;//设置它的委托方法
  5. self.textView.backgroundColor = [UIColor whiteColor];//设置它的背景颜色
  6. self.textView.text = @"Now is the time for all good developers tocome to serve their country.\n\nNow is the time for all good developers to cometo serve their country.";//设置它显示的内容
  7. self.textView.returnKeyType = UIReturnKeyDefault;//返回键的类型
  8. self.textView.keyboardType = UIKeyboardTypeDefault;//键盘类型
  9. self.textView.scrollEnabled = YES;//是否可以拖动
  10. self.textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;//自适应高度
  11. [self.view addSubview: self.textView];//加入到整个页面中

  1. 创建UITextView及添加代理

          1、在ViewController.h添加事件代理和数据源代理<UTextViewDelegate>。

          2、在ViewController.h创建UITextView。

          3、在ViewController.m初始化UITextView。

          4、代理授权并添加至视图。

          5、在有导航栏的情况下可能输入文本框是下移,修复方法:在ViewController.m中的viewDidLoad方法中添加self.automaticallyAdjustsScrollViewInsets = NO;

  2. 设置UITextView的属性

          1、设置文本属性:text;

          2、设置文字对齐方式属性:textAlignment;

          3、设置文字颜色属性:textColor;

          4、设置文字字体属性:font;

          5、设置编辑使能属性:editable;

          6、设置背景颜色属性:backgroundColor;

          7、圆角边框:layer.cornerRadius、layer.borderWidth。

  3. 添加UITextView的代理方法

          1、将要开始编辑:textViewShouldBeginEditing;

          2、将要完成编辑:textViewShouldEndEditing;

          3、开始编辑:textViewDidBeginEditing;

          4、完成编辑:textViewDidEndEditing;

          3、将要改变内容:shouldChangeTextInRange;

          4、内容完成改变:textViewDidChange;

          5、内容被选中:textViewDidChangeSelection。

  4. 输入文字时自动滚动到底部

          1、创建并初始化一个UIButton按钮;

          2、为按钮添加点击事件;

          3、拼接字符串赋值给self.textView.text;

          4、计算NSRange自动滚动到底部。

  5. 模仿UITextField的placeholder属性

          1、创建并初始化一个全局控件UILabel标签;

          2、将UILabel的背景颜色设置为透明颜色clearColor;

          3、设置UILabel的textColor属性为灰色grayColor;

          4、设置UILabel的text属性为需要的提示文字;

          5、设置UILabel的font属性和self.textView.font一致;

          6、将UILabel加载至self.textView图层上;

          7、在textViewDidBeginEditing和textViewDidEndEditing内写实现方法。

  6. 设置点击空白处时隐藏键盘

          self.view本身有被点击事件,添加方法可以隐藏键盘。

          拼接内容完成时也隐藏键盘[self.view endEditing:YES]。

代码下载地址

  • https://github.com/cjq002/UITextView.git

补充1. UITextView退出键盘的几种方式

因为你点击UITextView会出现键盘,如果你退出键盘,有如下几种方式:

(1)如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实UITextViewDelegate。

代码如下:

[csharp] view
plain
copy

 
  1. - (void)textViewDidBeginEditing:(UITextView *)textView {
  2. UIBarButtonItem *done =    [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(leaveEditMode)] autorelease];
  3. self.navigationItem.rightBarButtonItem = done;
  4. }
  5. - (void)textViewDidEndEditing:(UITextView *)textView {
  6. self.navigationItem.rightBarButtonItem = nil;
  7. }
  8. - (void)leaveEditMode {
  9. [self.textView resignFirstResponder];
  10. }

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

代码如下:

[csharp] view
plain
copy

 
  1. #pragma mark - UITextView Delegate Methods
  2. -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
  3. {
  4. if ([text isEqualToString:@"\n"]) {
  5. [textView resignFirstResponder];
  6. return NO;
  7. }
  8. return YES;
  9. }

这样无论你是使用电脑键盘上的回车键还是使用弹出键盘里的return键都可以达到退出键盘的效果。

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

代码如下:

[csharp] view
plain
copy

 
  1. UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)];
  2. [topView setBarStyle:UIBarStyleBlack];
  3. UIBarButtonItem * helloButton = [[UIBarButtonItem alloc]initWithTitle:@"Hello" style:UIBarButtonItemStyleBordered target:self action:nil];
  4. UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
  5. UIBarButtonItem * doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)];
  6. NSArray * buttonsArray = [NSArray arrayWithObjects:helloButton,btnSpace,doneButton,nil];
  7. [doneButton release];
  8. [btnSpace release];
  9. [helloButton release];
  10. [topView setItems:buttonsArray];
  11. [tvTextView setInputAccessoryView:topView];
  12. -(IBAction)dismissKeyBoard
  13. {
  14. [tvTextView resignFirstResponder];
  15. }

补充2.设置UITextView圆角问题

做法是在 #import QuartzCore/QuartzCore.h 后,便能調用[textView.layer setCornerRadius:10]; 來把 UITextView 设定圓角

补充3.UITextView根据文本大小自适应高度

通过实现文本字数来确定高度,如下:

[csharp] view
plain
copy

 
  1. NSString * desc = @"Description it is  a test font, and don't become angry for which i use to do here.Now here is a very nice party from american or not!";
  2. CGSize  size = [desc sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(240, 2000) lineBreakMode:UILineBreakModeWordWrap];

只有UILabel需要定义的numberoflines为0,即不做行数的限制。如下:

[csharp] view
plain
copy

 
  1. [label  setNumberOfLines:0];
  2. [label  setFrame:CGRectMake(40, 135, 240, size.height+10)];
  3. [label setText:desc];

补充4.UITextView自定选择文字后的菜单

在ViewDidLoad中加入:

[csharp] view
plain
copy

 
  1. UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@"分享到新浪微博" action:@selector(changeColor:)];
  2. UIMenuController *menu = [UIMenuController sharedMenuController];
  3. [menu setMenuItems:[NSArray arrayWithObject:menuItem]];
  4. [menuItem release];

当然上面那个@selector里面的changeColor方法还是自己写吧,也就是说点击了我们自定义的菜单项后会触发的方法。

然后还得在代码里加上一个方法:

[csharp] view
plain
copy

 
  1. -(BOOL)canPerformAction:(SEL)action withSender:(id)sender
  2. {
  3. if(action ==@selector(changeColor:))
  4. {
  5. if(textView.selectedRange.length>0)
  6. return YES;
  7. }
  8. return NO;
  9. }

实现后如下图:

IOS中UITextView(多行文本框)控件的简单用法的更多相关文章

  1. 一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)

    本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/     1.创建并初始化 创建UIText ...

  2. iOS中如何让TextView和TextField控件支持return键收起输入法

    TextView和TextField控件是iOS中负责接收用户输入的控件,那当用户输入完成时怎么收起面板呢? 1.TextView和TextField控件获得焦点之后的第一反应就是弹出输入法面板: 2 ...

  3. 在DWZ框架中整合kindeditor复文本框控件

    今天上午在DWZ框架中整合kindeditor复文本框控件,发现上传图片是老是提示 “上传中,请稍候...”,上网查看别人说可能是文件路径问题,在想以前在其他项目中用这个控件一直没问题,到这里怎么会出 ...

  4. iOS 搜索框控件 最简单的dome

    刚学习搜索框控件,写了个最简单的dome #import <UIKit/UIKit.h> .h @interface ViewController : UIViewController&l ...

  5. tkinter中checkbutton多选框控件和variable用法(六)

    checkbutton控件 简单的实现多选: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry ...

  6. IOS中tableView每组的头部控件、通过tableView的代理方法控制某一行的cell能否达到高亮选中状态

    一.tableView每组的头部控件 1.控件宽度默认就是tableView的宽度 2.控件高度由下面的代理方法决定 - (CGFloat)tableView:(UITableView *)table ...

  7. 关于c#中的Timer控件的简单用法

    Timer控件主要会用到2个属性一个是Enabled和IntervalEnabled主要是控制当前Timer控件是否可用timer1.Enabled=false;不可用timer1.Enabled=t ...

  8. 属性控件CMFCPropertyGridCtrl简单用法

    这是我的原创! 用一堆的编辑框下拉框做配置界面,很是繁琐,还要对齐排版……用这个属性控件 CMFCPropertyGridCtrl 就可以统一风格了. //初始化 CMFCPropertyGridCt ...

  9. 时间控件My97简单用法

    my97的用法很是简单,项目中用到,查了资料才找到的,简单使用,记一下,方便查阅. 1.添加依赖. <script language="javascript" type=&q ...

随机推荐

  1. Jstorm与RocketMQ整合

    如果是经常关注阿里巴巴的朋友们,看到我这篇博客的题目,就知道我在参加今年的中间件比赛. 好了,废话不说,开始了. 首先我们知道,rocketmq的consumer有两种,一种是DefaultMQPus ...

  2. 使用github搭建网站

    http://blog.csdn.net/pipisorry/article/details/51707366 使用github建站 github设计了Pages功能,允许用户自定义项目首页,用来替代 ...

  3. 使用git-flow来帮助管理git代码

    对git不熟悉的我,经常把git提交搞得很乱,导致在master上有许多无用的commit,最终决定好好地看一下git的使用教程,却不小心发现了还有一个git-flow的工具可以帮助我管理好git项目 ...

  4. 从浏览器直接转跳到APP具体页面---(魔窗)MagicWindow使用教程

    想要实现在网页里一键调到你APP的指定页面吗,好比打开 JD的一个商品的网页,从网页调到APP这个商品的页面.APP服务化, 使用魔窗SDK可以轻松实现! 老规矩:效果图奉上 1.注册魔窗账号,创建A ...

  5. 轻松学习Asp.net中的控件

    C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应用软件 ...

  6. XML文档操作之JAXP下实现

    JAXP是java API for xml PRocessing的缩写. 其API可以在javax.xml.parsers 这个包中找到.这个包向用户提供了两个最重要的工厂类,SAXParserFac ...

  7. Dynamics CRM2013 更新用户数据主要电子邮件字段报数据加密错误

    今天在更新用户数据中的主要邮件字段时报数据 可以进系统设置-数据管理-数据加密中开启,但前提是必须启用https访问而不能用http,在第二个框内输入秘钥点击激活就行了,我这边已经激活过了所以显示的是 ...

  8. 汉字转拼音的Oracle函数

    前言: 最近处理一个特殊的问题,需要用到汉字自动转换拼音的功能. 解决: 在这里找了不少资料,都是有所缺陷,而且也好像很绕.其实是一个很简单的东东.后来还是自己写了一个函数获取.分享出来,给有需要的X ...

  9. Ubuntu sudo 免密码之 sudoers 修改

    Ubuntu sudo 免密码之 sudoers 修改 重要提示: 本文内容仅在虚拟机上实验通过.如果你不确信这个过程,请不要擅自改变/etc/sudoers.否则可能导致你的机器不可用.本文对由此产 ...

  10. leetcode之 Palindrome Partitioning I&II

    1 Palindrome Partitioning 问题来源:Palindrome Partitioning 该问题简单来说就是给定一个字符串,将字符串分成多个部分,满足每一部分都是回文串,请输出所有 ...