#import "ViewController.h"

    @interface ViewController ()<UITextViewDelegate>

    @end

    @implementation ViewController
{
UITextView *textView1;
UITextField *textField1;
} - (void)viewDidLoad { self.view.backgroundColor = [UIColor greenColor];
//初始化
textView1=[[UITextView alloc]init];
//设置大小位置
textView1.frame=CGRectMake(, , , );
//设置背景颜色
textView1.backgroundColor=[UIColor orangeColor];
//设置文字内容
textView1.text=@"开始对话";
//设置字体大小,加粗和斜体等
textView1.font=[UIFont boldSystemFontOfSize:];
//经过以上设置,文字超过框,我们可以上下滚动来查看,而且我们也能继续输入添加删除等等,还可以copy和cut(双击文字)
//还可以换行输入等等,这是和textField的区别之一
//如果是否可编辑设置为NO,则不可添加删除和cut,只能copy
//这个时候键盘也不出来了,只能双击文字copy
textView1.editable=YES;
// //在AppDelegate中加入UITextViewDelegate后
textView1.delegate=self; [self.view addSubview:textView1]; //我们增加一个UITextField和UIButton,在UITextField中输入内容,然后按钮添加,就把内容添加到UITextView中
textField1=[[UITextField alloc]init];
textField1.frame=CGRectMake(, , , );
textField1.backgroundColor = [UIColor cyanColor];
textField1.borderStyle=UITextBorderStyleRoundedRect;
textField1.clearsOnBeginEditing = YES;
[self.view addSubview:textField1];
UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame=CGRectMake(, , , );
[btn1 setTitle:@"添加" forState:UIControlStateNormal];
btn1.backgroundColor=[UIColor orangeColor];
[self.view addSubview:btn1]; //给btn1增加一个事件
[btn1 addTarget:self action:@selector(addText1) forControlEvents:UIControlEventTouchUpInside]; [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} -(void)addText1{
//注意用的函数是stringByAppendingFormat
textView1.text=[textView1.text stringByAppendingFormat:@"\n%@",textField1.text];
//添加后光标定位在最尾部
//slectedRange是一个结构,表示位置和长度,后面的NSMakeRange同样
//NSUInteger 表示无符号的整型,但用下面两行设置无效,因为selectedRange是一个属性,可以获得值也可以赋值但不是方法不可以操作滚动动作
//NSUInteger len1=textView1.text.length-1;
//textView1.selectedRange=NSMakeRange(len1, 0);
//需要用一下滚动操作的方法,并且把selectedRange属性值作为Range值传递进去
//不满意的是每次新添加后它都要从Top滚动到尾部,感觉怪怪的
[textView1 scrollRangeToVisible:textView1.selectedRange];
} //以下四个协议里面的方式和UITextFieldDelegate里地一样,略去不说
//- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
//- (BOOL)textViewShouldEndEditing:(UITextView *)textView;
//- (void)textViewDidBeginEditing:(UITextView *)textView;
//- (void)textViewDidEndEditing:(UITextView *)textView; //一看是BOOL,不是YES就是NO,就是允许修改内容
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
return YES;
}
//只有在内容改变时才触发,而且这个改变内容是手动输入有效,用本例中得按钮增加内容不触发这个操作
- (void)textViewDidChange:(UITextView *)textView{
NSLog(@"Did Change");
}
//几乎所有操作都会触发textViewDidChangeSelection,包括点击文本框、增加内容删除内容
//可以理解为只要于selectedRange有关都会触发,(位置与长度)
- (void)textViewDidChangeSelection:(UITextView *)textView{
NSLog(@"Did Change Selection");
} @end

(1)UITextView和UITextField的区别可以(简单)理解为,前者是一块区域可以写很多东西有换行滚动条神马的,后者只有一行文本,类似于html里面的textarea和text。

(2)在本例中,我们利用一个UITextField和一个UIButton不断把UITextField里面的内容加到UITextView的最
后一行。这里面用到给按钮增加 一个事件,并在事件里面把UITextField.text加到UITextView.text的后面。

(3)在本例中为了用户体验,可以设置每次增减内容后,光标或者文本框是现实最后一行的,这里面用了scrollRangeToVisible方
法,这个方法需要一个Range参数,我们可以获得UITextView的selectedRange后当做参数传递过去。这个Range系列都是一个
struct结构,包括位置和长度两个参数的结构,有点类似于CGPoint和CGSize的感觉。

(4)还利用在AppDelegate.h中增加UITextViewDelegate协议,了解其中的方法,有几个是否允许编辑、结束编辑、编辑和结束编辑后如何操作等等。

(5)还有几个协议方法比较重要,因为涉及到是否可以改变内容,内容改变后或者触发seletedRange里面的位置或者长度(也就是光标位置改变和增减内容)发生变化时如何操作。这个……呃……很实用吧。当然还可以输出变化的内容等等。

UITextView 点击添加文字 光标处于最后方的更多相关文章

  1. iOS - UITextView实现placeHolder占位文字

      iOS之UITextView实现placeHolder占位文字的N种方法 前言 iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件.UITextFie ...

  2. C#使用 DirectX SDK 9做视频播放器 并在视频画线添加文字 VMR9

    视频图像处理系列 索引 VS2013下测试通过. 在百度中搜索关键字“DirectX SDk”,或者进入微软官网https://www.microsoft.com/en-us/download/det ...

  3. 如何在IamgeButton上面添加文字

    如何在IamgeButton上面添加文字? 首先要知道,IamgeButton是不可以直接添加文字的.所以我们需要间接制作一个Button按钮 我的代码将会展示另外一个例子,与本文中的代码相似. 本文 ...

  4. R语言 如何为图片添加文字说明(转载)

    转载:(中文翻译者)[http://blog.csdn.net/chen790646223/article/details/49766659] (原文链接)[http://datascienceplu ...

  5. OSG项目经验2<在场景中添加文字面版>

    添加文字版需要用到osg的三个名字空间:                         osgText::Text,这个类用来添加文字和设置文字的一些属性:                     ...

  6. javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  7. PDF怎么添加文字水印与图片水印

    现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...

  8. OpenLayers学习笔记(三)— QML与HTML通信之 地图上点击添加自由文本

    实现在地图随意点击,弹出文本输入框,输入任意文字,完成自由文本添加的功能 作者: 狐狸家的鱼 GitHub:八至 本文链接:地图上点击添加自由文本 关于如何QML与HTML通信已经在上一篇文章 QML ...

  9. python自动制作gif并添加文字

    引言     最近租的房子快到期了,哎,因为去年是第一次找房子租,结果遇到了一个东北黑中介,押一付三,房子有啥问题,灯坏了,下水道堵了,原来签合同的时候说的客气,说是马上就会上门解决,结果实际上我每次 ...

随机推荐

  1. struts2笔记(2)

    <context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...

  2. VO对象和PO对象的区别

    VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成.从结构上看,它们并没有什么不同的地方.但从其意义和本质上来 ...

  3. WinForm BaseClass类常用通用方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  4. POJ 2352 Stars 线段树

    题目链接 题意:在一个二维平面上有n个星星,每个星星的等级为x,x为该星星左方和下方所包含的星星的数量(包含正左和正下的),输出每个等级各有多少星星,星星坐标按照y序递增给出,y值相同按照x递增给出. ...

  5. 裸奔单片机GUI

    #include "main.h"#ifndef __STD_GUI_CONTEX__#define __STD_GUI_CONTEX__ #define CPSTRSIZE 20 ...

  6. QQ聊天界面模式切换

    1.打开一个聊天窗口 2.按照图上步骤 3.模式 3-1气泡模式 3-2文本模式

  7. java 标签库(核心,xml,sql ,国际化,函数)

    java标签库分分为上述几种,一般经常使用的是核心和函数,接下来会分别讲解这几种,和常见的用法. 一般标签库会和el表达式一起使用,所以在学习标签库前最后也学习下el表达式的使用. 导入后展开 可以从 ...

  8. STL string的构造函数

    前几天在网上,一位网友问我几个问题如下: , 'A'); string S1 = "abcdefg"; , ); ); cout << "s0 = " ...

  9. 从匿名方法到 Lambda 表达式的推演过程

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...

  10. java反射详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...