iOS控件之UITextView-程序员宅基地

父类

继承于UIScrollView,所以它具有UIScrollView的属性和方法。
继承于UIScrollView的相关属性和方法以下不再赘述请参见:iOS控件之UIScrollView

创建

UITextView * textView = [[UITextView alloc] init];
UITextView * textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 80, 300, 200)];
UITextView * textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 80, 300, 200) textContainer:container]; 

属性

  • 内容
textView.text = @"这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字。\n这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字,这是一段文字。";
  • 文字颜色
textView.textColor = [UIColor blackColor];
  • 字体
textView.font = [UIFont systemFontOfSize:18.f];
  • 对齐方式
textView.textAlignment = NSTextAlignmentCenter;
typedef NS_ENUM(NSInteger, NSTextAlignment) {
    NSTextAlignmentLeft      = 0,    // 左对齐
#if TARGET_OS_IPHONE
    NSTextAlignmentCenter    = 1,    // 居中对齐
    NSTextAlignmentRight     = 2,    // 右对齐
#else /* !TARGET_OS_IPHONE */
    NSTextAlignmentRight     = 1,
    NSTextAlignmentCenter    = 2,
#endif
    NSTextAlignmentJustified = 3,    // 两端对齐
    NSTextAlignmentNatural   = 4,    // 根据现实的文字特性对齐
} NS_ENUM_AVAILABLE_IOS(6_0);
  • 是否可以编辑
textView.editable = NO; // 默认YES 
  • 是否可以选中
textView.selectable = NO; // 默认YES 当设置为NO时,不能选择
  • 选中范围
textView.selectedRange = NSMakeRange(8, 6);
  • 富文本
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithString:@"这是一个富文本"];
[attrStr addAttribute:NSFontAttributeName
                    value:[UIFont systemFontOfSize:30.0f]
                    range:NSMakeRange(4, 3)];

textView.attributedText = attrStr;
// 是否允许改变文本属性字典
textView.allowsEditingTextAttributes = NO;
NSMutableDictionary * attributesDic = [textView.typingAttributes mutableCopy];
[attributesDic setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName];
// automatically resets when the selection changes
// 重新设置 接下来改变的文字 的属性字典
textView.typingAttributes = attributesDic;
/*一般在一些代理函数中使用,比如当编辑状态的变化*/

 

 
 


关于富文本的知识请看iOS富文本字符串AttributedString详解

 

  • 输入视图
// 试着改变view的frame,发现只有height值会对视图有影响,只会改变附加视图的高度
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 100)];
view.backgroundColor = [UIColor redColor];
// 不弹出键盘,弹出添加的这个视图,一般用作像银行app的自定义键盘
textView.inputView = view;
 
 
  • 输入键盘附加视图
UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 50, 100, 50)];
view.backgroundColor = [UIColor redColor];
// 在键盘上附加一个视图,一般用于添加一个收回键盘的按钮
textView.inputAccessoryView = view;
 
 
  • 获得焦点后选中现有文本,输入内容时清除当前选中文本
textView.clearsOnInsertion = YES; // 默认为NO
 
 
  • 文本内容与边界的间距
textView.textContainerInset = UIEdgeInsetsMake(20, 20, 20, 20);
 
 
  • 链接文本的样式设置
/*在接下来的应用中会介绍*/
@property(null_resettable, nonatomic, copy) NSDictionary<NSString *, id> *linkTextAttributes NS_AVAILABLE_IOS(7_0);
  • 只读属性
    有时间会专门来说这三个属性......,会将链接帖到这儿
// Get the text container for the text view
@property(nonatomic,readonly) NSTextContainer *textContainer NS_AVAILABLE_IOS(7_0);
// Convenience accessors (access through the text container)
@property(nonatomic,readonly) NSLayoutManager *layoutManager NS_AVAILABLE_IOS(7_0);
@property(nonatomic,readonly,strong) NSTextStorage *textStorage NS_AVAILABLE_IOS(7_0);

方法

  • 滚动到文本的某个段落
[textView scrollRangeToVisible:NSMakeRange(50, 5)];

代理函数

// 将要开始编辑
- (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;

// 是否允许对文本中的URL进行操作
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange NS_AVAILABLE_IOS(7_0);
// 是否允许对文本中的富文本进行操作
- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange NS_AVAILABLE_IOS(7_0);

通知

// 在程序中添加以下通知就可以获得相应的状态事件

// 开始编辑的通知
UIKIT_EXTERN NSString * const UITextViewTextDidBeginEditingNotification;
// 文本发生变化的通知
UIKIT_EXTERN NSString * const UITextViewTextDidChangeNotification;
// 编辑结束的通知
UIKIT_EXTERN NSString * const UITextViewTextDidEndEditingNotification;

应用

  • 设置链接样式
UITextView * textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 100, 300, 50)];

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"这是一个链接:www.123456.com"];
[attributedString addAttribute:NSLinkAttributeName
                         value:@"url1://www.baidu.com"
                         range:NSMakeRange(7, 14)];
    
    
NSDictionary *linkAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor],
                                  NSUnderlineColorAttributeName: [UIColor lightGrayColor],
                                  NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)};
    

textView.linkTextAttributes = linkAttributes;
textView.attributedText     = attributedString;
textView.delegate           = self;
textView.editable           = NO; // 可编辑状态不能点击链接
[self.view addSubview:textView];
// 要实现代理
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
    if ([[URL scheme] isEqualToString:@"url1"]) {
        NSString * url = [URL host];
        
        NSLog(@"%@",url);
        
        // 在这里利用url做点什么事情......

        return NO;
    }
    return YES;
}

 

转载于:https://www.cnblogs.com/starSunFish/p/7999191.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/anita11111/article/details/102443623

智能推荐

c++基础知识杂记(Day4类与对象)-程序员宅基地

文章浏览阅读768次。1.使用构造函数。显式调用: Stock food = Stock("adasdas",2250);隐式调用:Stock food("adasdas",2250);使用动态内存分配调用:Stock *pstock = new Stock("adasdas",2250);注意:无法使用对象来调用构造函数,因为在构造函数构造出对象前,对象是不存在的。因此,构造函数被用来创建对象,而不是通过对象来调用。2.const成员函数。声明:void show() const;定义:void stack

FutureTask设置方法执行的超时时间_futuretask 超时-程序员宅基地

文章浏览阅读5k次。import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.FutureTask;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutEx..._futuretask 超时

Go语言基础之指针_go语言指针偏移-程序员宅基地

文章浏览阅读237次。一、Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&(取地址)和*(根据地址取值二、要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。a := 10ptr := &ab := *ptr..._go语言指针偏移

为什么至少三个哨兵_一文带你了解Redis哨兵模式和高可用集群解析(万字长文)...-程序员宅基地

文章浏览阅读778次。前言 Redis 的 主从复制 模式下,一旦 主节点 由于故障不能提供服务,需要手动将 从节点 晋升为 主节点,同时还要通知 客户端 更新 主节点地址,这种故障处理方式从一定程度上是无法接受的。Redis 2.8 以后提供了 Redis Sentinel 哨兵机制 来解决这个问题。正文1. Redis高可用概述在 Web 服务器中,高可用 是指服务器可以 正常访问 的时间,衡量的标准是在 多长时间..._为什么高可用都是3个

Windows 11频繁更新,网友:越更越难用_win11 频繁更新 影响工作-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏3次。Windows 11带来“倒退式”用户体验?_win11 频繁更新 影响工作

汇编除法运算-程序员宅基地

文章浏览阅读3.4w次,点赞10次,收藏45次。汇编的除法指令是div, 实际上相对高级语言的除法, 汇编指令的div是同时得到商和余数的, 结果分别保存在不同的寄存器.除数: 有8位和16位两种, 在一个寄存器或者内存单元中被除数: 如果除数是8位则被除数为16位, 默认放在AX中, 如果除数是16位, 则被除数为32位, 默认高位放在DX, 低位放在AX结果: 如果除数是8位, 那么执行div后, 余数存放在AH, 商存放在AL中; 如_汇编除法

随便推点

微动探测原理及仪器介绍-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏16次。微动探测原理及仪器介绍1、微动探测原理1.1 基本理论微动是由体波和面波组成,其中微动能量的百分之七十以上都来自于面波,并且它与体波的主要区别是在不均匀的介质中传播时面波会发生频散,而体波不存在频散现象,因此面波是微动探测的主要对象。对于介质的弹性参数(如横波速度、层薄厚、压缩波速度、密度等),面波传播速度相对比较敏感,特别是对横波的敏感性很高,因此可以利用面波来反演横波速度。在时间和空间上,微动信号具有以下特性:高度变化、无规律性、无重复性等,有研究发现全世界各处记录的微动信号都有相似_微动探测

C语言实现整数质因数分解_正整数分解质因数c语言-程序员宅基地

文章浏览阅读482次。在C语言中,我们可以编写程序来将给定的正整数分解为其质因数。在本文中,我将展示一个简单的C语言程序,用于分解正整数的质因数,并提供相应的源代码和解析。希望通过这个示例程序和解析,您能够理解如何在C语言中实现正整数的质因数分解。这是一个基本的算法,可以用于解决数论和因数分解相关的问题。在函数内部,我们使用一个循环来迭代从2到给定正整数的所有可能的因数。是否等于1,如果不等于1,则打印" × ",表示这个因数还没有完全分解。在这个例子中,我们将正整数84分解为其质因数:2、2、3和7。如果可以整除,我们将。_正整数分解质因数c语言

C++对象数组的正确创建方式-程序员宅基地

文章浏览阅读1.2w次,点赞7次,收藏16次。类类型数组和数据类型数组的创建方式相同。分为栈中创建和堆中创建_c++对象数组

解决:jupyter notebook内核总是死亡_内核死亡-程序员宅基地

文章浏览阅读2.4k次。其实就是不知道为什么电脑缺了tornado,或者就是tornado有问题。此时可以通过运行下面的代码进行解决(两个中任选一个就行,一个不行的话就试试另外一个)系统:Windows11。_内核死亡

requests模块-代理proxies使用_requests proxy-程序员宅基地

文章浏览阅读1.7k次。反向代理不为浏览器或客户端转发请求,而是为最终处理请求的服务器转发请求。客户端不知道服务器的真实地址,请求发送给反向代理服务器,然后由反向代理服务器转发给最终处理请求的服务器,例如nginx。_requests proxy

SparkStreaming实时计算的框架和执行过程_实时计算框架 spark streaming实施方案-程序员宅基地

文章浏览阅读860次。SparkStreaming 为每一个数据源启动对应的Reciver(接收器),接收器以任务的形式运行在应用的Executor(执行器)进程中,从输入源接收数据 ,把数据分组为小的批次(batch),保存为RDD。然后把数据复制到另一个Executor中备份,保障容错性。然后我们根据这框架来谈一谈SparkStreaming运行的具体流程:1、客户端提交作业后启动Driver,通过Driver来启..._实时计算框架 spark streaming实施方案

推荐文章

热门文章

相关标签