UITextView 点击添加文字 光标处于最后方
#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 点击添加文字 光标处于最后方的更多相关文章
- iOS - UITextView实现placeHolder占位文字
iOS之UITextView实现placeHolder占位文字的N种方法 前言 iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件.UITextFie ...
- C#使用 DirectX SDK 9做视频播放器 并在视频画线添加文字 VMR9
视频图像处理系列 索引 VS2013下测试通过. 在百度中搜索关键字“DirectX SDk”,或者进入微软官网https://www.microsoft.com/en-us/download/det ...
- 如何在IamgeButton上面添加文字
如何在IamgeButton上面添加文字? 首先要知道,IamgeButton是不可以直接添加文字的.所以我们需要间接制作一个Button按钮 我的代码将会展示另外一个例子,与本文中的代码相似. 本文 ...
- R语言 如何为图片添加文字说明(转载)
转载:(中文翻译者)[http://blog.csdn.net/chen790646223/article/details/49766659] (原文链接)[http://datascienceplu ...
- OSG项目经验2<在场景中添加文字面版>
添加文字版需要用到osg的三个名字空间: osgText::Text,这个类用来添加文字和设置文字的一些属性: ...
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...
- PDF怎么添加文字水印与图片水印
现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...
- OpenLayers学习笔记(三)— QML与HTML通信之 地图上点击添加自由文本
实现在地图随意点击,弹出文本输入框,输入任意文字,完成自由文本添加的功能 作者: 狐狸家的鱼 GitHub:八至 本文链接:地图上点击添加自由文本 关于如何QML与HTML通信已经在上一篇文章 QML ...
- python自动制作gif并添加文字
引言 最近租的房子快到期了,哎,因为去年是第一次找房子租,结果遇到了一个东北黑中介,押一付三,房子有啥问题,灯坏了,下水道堵了,原来签合同的时候说的客气,说是马上就会上门解决,结果实际上我每次 ...
随机推荐
- C#对象先序列化然后反序列化时间丢失八小时的问题
把对象JSON序列化,然后反序列化后发现时间少了八小时.因为在东八区,所以序列的时候按照1970-01-01:08:00:00为基数取得差值,而反序列化的时候以1970-01-01:00:00:00作 ...
- 在一个aspx或ashx页面里进行多次ajax调用
在用ajax开发asp.net程序里.利用ashx页面与前台页面进行数据交互.但是每个ajax交互都需要一个ashx页面.结果是项目里一大堆ashx页面.使项目难以管理.现在我们就想办法让一个ashx ...
- VMWARE修改CPUID
在cmd shell下执行wmic cpu get ProcessorId命令,可是查看机器的cpuID,但这个命令显示的只是2组ID,实际CPUID,有4组 通过更改虚拟机配置文件.vmx可是实现任 ...
- Java中的堆栈区别
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...
- StringUtils中 isNotEmpty 和isNotBlank的区别
isNotEmpty : 判断某字符串是否非空 StringUtils.isNotEmpty(null) = false StringUtils.isNotEmpty("") = ...
- gdb调试
·代码(实验楼中的代码,改了部分数值)命名为test.c int g(int x) { return x + 7; } int f(int x) { return g(x); } int main(v ...
- 定位以及z-index
定位 定位用来控制元素的位置 定位的关键字是position,position有4个值,分别是relative,absolute,static,fixed当元素定位以后,元素有4个值可以用,分别是le ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题http ...
- 【leetcode】Pascal's Triangle II
题目简述: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Retur ...