iOS 富文本风格NSMutableParagraphStyle、定制UITextView插入图片和定制复制
来源:互联网 发布:mac 安装sass出错 编辑:程序博客网 时间:2024/04/29 00:53
问题一
开发过程中,经常会遇到动态计算行高的问题,
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullableNSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)contextNS_AVAILABLE(10_11, 7_0);
是苹果推荐的计算方法,显然会遇到段落格式问题,例如行间距、缩进等格式设置需求,attributes传进来的字典中,包含我们设置的字体及格式,其中NSParagraphStyleAttributeName是设置段落风格,NSFontAttributeName是设置字体。
ok,具体来看一下NSParagraphStyleAttributeName的功能。
好了,现在就可以很轻松的计算某一段落高度,例如:
另外,再介绍几个富文本处理的属性:
——————————————————————————————————————————————————————————————————
问题二
一、设置textView的行间距1.如果只是静态显示textView的内容为设置的行间距,执行如下代码:
// textview 改变字体的行间距 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 10;// 字体的行间距 NSDictionary *attributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:15], NSParagraphStyleAttributeName:paragraphStyle }; textView.attributedText = [[NSAttributedString alloc] initWithString:@"输入你的内容" attributes:attributes]; 2.如果是想在输入内容的时候就按照设置的行间距进行动态改变,那就需要将上面代码放到textView的delegate方法里-(void)textViewDidChange:(UITextView *)textView{ // textview 改变字体的行间距 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 20;// 字体的行间距 NSDictionary *attributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:15], NSParagraphStyleAttributeName:paragraphStyle }; textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes]; } 一、设置textView的placeholder UITextView上如何加上类似于UITextField的placeholder呢,其实在UITextView上加上一个UILabel或者UITextView,如果用UILable的话,会出现一个问题就是当placeholder的文字过长导致换行的时候就会出现问题,而用UITextView则可以有效避免此问题。- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if (![text isEqualToString:@""]) { _placeholderLabel.hidden = YES; } if ([text isEqualToString:@""] && range.location == 0 && range.length == 1) { _placeholderLabel.hidden = NO; } return YES;} 说明如下: (1) _placeholderLabel 是加在UITextView后面的UITextView,_placeholderLabel要保证和真正的输入框的设置一样,字体设置成浅灰色,然后[_placeholderLabel setEditable:NO];真正的输入框要设置背景色透明,保证能看到底部的_placeholderLabel。 (2) [text isEqualToString:@""] 表示输入的是退格键 (3) range.location == 0 && range.length == 1 表示输入的是第一个字符————————————————————————————————————————————————————————————————————
问题三
UITextView富文本、插入图片
直接看代码
_textView 是定义的成员变量
通过代理方法 得到选中文字的起始位置和长度 通过定义成员变量的方式保存起来 代码如下
富文本 让选中的字体加粗或者改变颜色都可以 代码中是点击按钮触发字体选中改变方法
图片插入 代码中也是通过按钮触发方法 点击按钮 复制一张图片到光标位置
————————————————————————————————————————
问题四
继承UITextView
1.定制选中文字的菜单
首先新建一个类,继承自UITextView,假设类名为MyTextView,关键代码如下:
以上第一个方法用来确保我们选中文字后的菜单可以弹出,第二个方法用来关闭菜单中所有系统的菜单项,如copy, select, select all等。
然后使用UIMenuController定制菜单:
注意必须实现两个MenuItem的响应方法才能显示出菜单:
最终效果如下:
之前的项目没有要求定制菜单项的图像,直接看SDK的内容的话貌似也没有Image之类的属性或方法,所以深层次定制菜单项的内容不得而知了。
2.通过代码选中一段文字
这个很简单,直接改变UITextView的selectedRange属性的值就可以了:
例如我们点击选择文字后弹出一个文字选择的输入视图,这个我用一个XIB文件定制:
小心了,将xib中的UI组件和View Controller中的Outlet连接时,在代码中要先从xib文件中加载视图,才能使用其中的UI组件,例如:
如果将 self.location_inputTextField.delegate =self;
self.length_inputTextField.delegate =self;
这两行代码置于loadNibNamed方法之前,那么两个文本输入框的delegate将为空(因为他们本身都是空,还没有加载)。
选择文字的Action代码为:
没错,只要一句self.myTextView.selectedRange =self.currentSelection_;就可以了。
另外,我们可以在UITextView的以下方法中监听到某段文字被选中:
运行结果:
控制台输出如下:
3.让键盘主动出现
为了让用户更省心,我们可以在一个带输入框的视图出现时就让键盘弹出来,而不用用户再点一下输入框了。方法很简单,就一行代码:
4.两个输入框按return时仿回车功能
有多个输入框,在一个输入框中按了return,然后好像在网站输入框中按了回车,直接跳到下一个输入框,这个也非常简单,就是resignFirstResponder和becomeFirstResponder方法结合使用而已,在UITextField的委托方法中实现:
Demo已经上传,有兴趣的可以下载看看:点此进入下载页
以上第一个方法用来确保我们选中文字后的菜单可以弹出,第二个方法用来关闭菜单中所有系统的菜单项,如copy, select, select all等。
注意必须实现两个MenuItem的响应方法才能显示出菜单:
例如我们点击选择文字后弹出一个文字选择的输入视图,这个我用一个XIB文件定制:
如果将
self.location_inputTextField.delegate =self;
self.length_inputTextField.delegate =self;
这两行代码置于loadNibNamed方法之前,那么两个文本输入框的delegate将为空(因为他们本身都是空,还没有加载)。没错,只要一句self.myTextView.selectedRange =self.currentSelection_;就可以了。
3.让键盘主动出现
4.两个输入框按return时仿回车功能
Demo已经上传,有兴趣的可以下载看看:点此进入下载页
0 0
- iOS 富文本风格NSMutableParagraphStyle、定制UITextView插入图片和定制复制
- UITextView富文本、插入图片
- iOS之UILabel和UITextView富文本操作
- iOS-NSMutableParagraphStyle段落风格
- ios定制按钮图片
- iOS富文本设置样式,插入图片,点击事件
- unity 富文本 插入图片
- UITextView富文本
- 富文本编辑器Ueditor不错,可定制选择哪些功能
- UEditor富文本编辑器,轻量,可定制
- ios UITextView 插入图片和文字自适应高度
- sharepoint富文本里插入图片、视频
- ios之定制iOS 7中的导航栏和状态栏/颜色/风格/字体/个性自定义
- UITextView:定制选中文字的菜单和…
- NSAttributedString/NSMutableAttributedString富文本的使用(NSMutableParagraphStyle)
- 富文本属性 -- NSMutableParagraphStyle与NSParagraphStyle的使用
- 定制DataGrid的风格
- 定制Blog页面风格
- Linux Shell基础-Bash变量
- Java中常用的锁分析总结
- Socket通信原理探讨
- Vysor安装、破解及黑屏问题
- java获取金额小数位数
- iOS 富文本风格NSMutableParagraphStyle、定制UITextView插入图片和定制复制
- ios中交换button的图片和文字的位置
- dubbo简单配置
- erminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequ
- 测试菜鸟在测试过程发现问题并整理的问题分析解决方案
- 关于企业内部竞聘的思考(转)
- 译文:在闭包中使用循环变量是有害的
- java用户角色权限设计
- 通过node的pipe实现请求代理