前言 iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件。UITextField和UITextView都输入文本,也都可以监听文本的改变。...图(一) 方法一 1.把UITextView的text属性当成“placeholder”使用。 2.在开始编辑的代理方法里清除“placeholder”。...1.创建textView 2.给textView添加一个UILabel子控件,作为placeholder 3.在文本改变的代理方法里面显示/隐藏UILabel 特点:该方法同样也可以实现类似于placeholder...5.重写相关属性的set方法 特点:这个方法的和方法三很相似,只是没有利用通知来监听文本的改变,需要配合textViewDidChanged:这个文本改变的代理方法使用。...*)text { [super setText:text]; if (text.length) { // 因为是在文本改变的代理方法中判断是否显示placeholder,而通过代码设置
它良好的结合了 UIKit 和 Core Graphics/Quartz: UIKit 的 UILabel 允许你通过在 IB 中简单的拖曳添加文本,但你不能改变文本的颜色和其中的单词。...为此,每个文本视图都有一个文本容器,它精确地描述了这个可用的区域。在简单的情况下,这是一个垂直的无限相当大的矩形区域。文本被填充到这个区域,并且文本视图允许用户滚动它。...然而,在更高级的情况下,这个区域可能是一个无限大的矩形。例如,当渲染一本书时,每一页都有最大的高度和宽度。文本容器会定义这个大小,并且不接受任何超出的文本。...相同情况下,一幅图像可能占据了页面的一部分,文本应该沿着它的边缘重新排版。...5、UITextView UITextView作为显示出来的实际的文本视图,在 TextKit 中,文本视图有两个目的:第一,它是文本系统用来绘制的视图。
正文 我们先从一段最简单的代码入手,在drawRect中显示一个普通的UILabel; 为了方便判断,我把整个view的背景设置成黑色: - (void)drawRect:(CGRect)rect {...所以按照UILabel.layer默认的坐标(0, 0),在左上角进行了绘制。 接着,我们尝试使用CoreText来渲染一段文本。...用我们在Windows常用的画图来参考,当我们使用画笔在白板中写字时,图形上下文就是画笔的属性设置、白板大小、画笔位置等等。...通常我们都会使用UIKit进行渲染,所以iOS系统在drawRect返回CGContext的时候,默认帮我们进行了一次变换,以方便开发者直接用UIKit坐标系进行渲染。...iOS可以使用CGContextSaveGState()方法暂存context状态,然后在CoreText绘制完后通过CGContextRestoreGState ()可以恢复context的变换。
用于ios本地动态生成验证码,效果如下: 导入CoreGraphics.framework 用于绘制图形 封装UIView,便捷使用,代码如下: AuthcodeView.h #import 方法来实现view的绘制 [self setNeedsDisplay]; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]...; //设置随机背景颜色 self.backgroundColor = kRandomColor; //根据要显示的验证码字符串,根据长度,计算每个字符串显示的位置 NSString...:kFontSize}]; } //调用drawRect:之前,系统会向栈中压入一个CGContextRef,调用UIGraphicsGetCurrentContext()会取栈顶的CGContextRef...; } #pragma mark 输入框代理,点击return 按钮 - (BOOL)textFieldShouldReturn:(UITextField *)textField { //判断输入的是否为验证图片中显示的验证码
) drawRect: (CGRect)rect; 方法,然后在这个方法中,可以去的跟当前view相关联的图形上下文; 绘制相应的图形内容(绘制时产生的线条称为路径,路径由一个或多个线段或曲线段组成)...--》 因为在drawRect: 方法中才能取得跟view相关联的图形上下文 drawRect: 方法在什么时候被调用? ...该属性在一段文本上应用多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的defaultParagraphStyle 方法返回的默认段落属性。...字母紧排的效果依赖于字体。值为 0 表示不使用字母紧排。默认值为0。...0 表示横排文本。1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义。
自定义UITextView 集成简单,只需在所用到的控制器中导入YMTextView即可,下面是示例代码: 在ViewController.m中 #import "ViewController.h" #...-(void)setupTextView { // 在这个控制器中,textView的contentInset.top默认会等于64 YMTextView *textView = [[...; @end 在YMTextView.m中: #import "YMTextView.h" @implementation YMTextView - (instancetype)initWithFrame...:font]; // setNeedsDisplay会在下一个消息循环时刻,调用drawRect: [self setNeedsDisplay]; } - (void)drawRect...:(CGRect)rect { // 如果有输入文字,就直接返回,不画占位文字 if (self.hasText) return; //设置文字属性 NSMutableDictionary
具体过程是系统会把 UIView 显示的内容(包括 UILabel 的文字,UIImageView 的图片等)绘制在一张画布上,完成后倒出图片赋值给 CALayer 的 contents 属性,完成显示...解决方案使用异步绘制就是: 把 UIView 显示的内容(包括 UILabel 的文字,UIImageView 的图片等)绘制生成的 bitmap 在子线程完成。...然后在合适的时机回调代理,调用 drawRect 默认操作是什么都不做(而之所以有这个接口,就是为了让我们在系统绘制之后,还可以做些自定义的绘制工作)。...*)text { _text = text; } - (void)setFont:(UIFont *)font { _font = font; } // 除了在drawRect方法中...(context, 0, size.height); // 原点为左下角 // 文本反转成context坐标系 CGContextScaleCTM(context, 1, -1);
不建议在这里使用。 方法二:自定义button 并且重写layoutSubviews。...如果button是从storyboard或者xib加载会调用aweakfromnib方法,我们可以在aweakFromNib中对控件进行一些统一的设置,在layoutSubviews中设置控件内内容的位置...关于三个button添加约束的方法:可以先设置中间按钮约束,然后约束三个按钮相互之间的间距为0。左边按钮与屏幕左边间距为0,右边按钮与屏幕右边为0,高度相同。最后约束三个按钮平分屏幕宽度。...,然后设置为@" ",这时占位文字的颜色也会设置,然后在将占位文字的内容修改回为空,此时即使我们只设置了占位文字颜色,没有设置占位文字,打印占位文字为null // NSString *oldplaceholder..., id> *)attrs range:(NSRange)range; 一般只要牵扯到显示文字的地方都可以使用富文本来做一些显示的优化,下面我们来看一些使用的实例 图文混排 UILabel *label
在使用中通过将AttributedString赋值给控件的 attributedText 属性来添加文字样式。 可设置的控件有UILabel、UITextField和UITextView。...NSVerticalGlyphFormAttributeName 设置文字排版方向 取值为NSNumber对象(整数),0表示横排文本,1表示竖排文本 在iOS中只支持0 */ NSString...属性单独列出来,是因为在 UILabel 和 UITextField 中是无法使用该属性的。...:(NSRange)characterRange, 在该方法中,返回 YES,则会打开URL地址,返回 NO则不会。...return YES; } 注意: 实现textView的代理,否则调不到回调方法。 设置textView的 editable 属性为 NO,在可编辑的状态下是不可点击的。
目前市面上的非UI线程文本算高方法或多或少都有一些问题。本文通过逆向和分析UILabel的sizeThatFits方法实现来得到一个最佳的文本算高的精简方法。...方法可以运行在任意线程,因此可以有效的应用在那些异步算高或者要求尺寸进行提前计算的场景中。...下面就是具体的实现代码: /// 使用此方法时请标明源作者:欧阳大哥2013。本方法符合MIT协议规范。.../// @param text 要计算的简单文本NSString或者属性字符串NSAttributedString对象 /// @param numberOfLines 指定最大显示的行数,如果为0则表示不限制最大行数.../// @param font 指定计算时文本的字体,可以为nil表示使用UILabel控件的默认17号字体 /// @param textAlignment 指定文本对齐方式默认是NSTextAlignmentNatural
于是我在 dealloc的方法添加了 Log信息,果然竟然走了 dealloc的方法。 虽然我创建的局部变量,但是我通过 addSubView方法已经添加到试图上面了。...756EDF51-D681-4F3D-92BF-840EEDFA101B 这究竟是怎么个情况,最后在群中得到的答复是我添加在 keyWindow是当时弹出来的 Alert的 注册通知的弹出框。...,左侧5 右侧5 和剪头图片的距离为5 下面不设置自适应 怎么可以形成上图的结果呢 我们可以让文本添加\n 换行符即可。...那是因为如果设置虚线圈,则是镂空,无法出现设计图的效果。我们需要进行绘制,则是用到了 drawRect方法。...还有一点忘记说明,我们可以在父类添加下面方法,用于查找试图对应父类试图所在的中心点位置。
在使用中通过将AttributedString赋值给控件的 attributedText 属性来添加文字样式。有属性的控件有UILabel、UITextField和UITextView。...使用方式一 初始化一个NSMutableAttributedString,然后向里面添加文字样式,将其赋给控件的 *attributedText*属性。...赋值, 并利用方法appendAttributedString: 添加入NSMutableAttributedString,将其赋给控件的attributedText属性。...,取值为 NSString 对象,目前只有图版印刷效果可用: //NSAttachmentAttributeName NSTextAttachment 设置文本附件,常用插入图片 //NSLinkAttributeName...在iOS没卵用,不支持竖版 2.设置段落样式:段落样式中允许你设置文字与文字之间的行间距、字符间距、以及对齐模式,但是注意的是,在设置段落样式的时候,必须保证控件的 numberofline属性必须为
在这浓浓的鞭炮声中,迎来了这个系列的最后一篇。哈哈~这是多么有纪念意义的春节呀。...用一个UISlider来模拟进度下载,这样可以通过拖动滑杆,感受到下载的过程。 实际开发中的提醒:在实际中,下载进度通常都不会放在主线程上,所以子线程获得下载的进度之后,不要忘记回到主线程刷新UI。...我们这些模拟都是通过滑杆的,所以所有的操作不涉及到多线程。 3. 进度条的实现 进度条我们这里就直接使用了SB的UIProgressView这个控件。...重新进度属性的set方法,为的是给进度赋值的时候可以时时刷新UI,同时用文字Label显示进度的具体数值。...设置扇形的填充模式 [sectorPath fill]; } //重写progress的set方法,可以在赋值的同时给label赋值 - (void)setProgress:(CGFloat
为了计算UILabel的宽度,除了通过NSString自带的boundingRectWithSize的API外,还可以利用sizeToFit对UILabel封装一个分类。 1....调用示例: 场景:在一个UITableViewCell中,重写Cell的一个模型属性的setter方法,需要先对UILabel对象的text属性赋值后,再进行更新布局约束操作。...options: 文本绘制时的附加选项。可能取值请参考“NSStringDrawingOptions”。 attributes: 文本绘制时用到的AttributedString的属性。...最终,该对象包含的信息将用于文本绘制。该参数一般为 nil 。 返回值: 一个矩形,大小等于文本绘制完将占据的宽和高。 练习题:封装一个根据字体,字符串,宽度等参数得到高度的方法?...关于boundingRectWithSize,系统API有几个类的相关方法。
假设有个UILabel 添加它距离左边的距离约束为left的constraint 值为 10 现在我们想让它距左边的距离以动画形式改变为100 如果这么做 UIView.animateWithDuration...drawRect在以下情况下会被调用: 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。...drawRect调用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给...以上1,2推荐;而3,4不提倡 drawRect方法使用注意点: 1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。...2、若使用calayer绘图,只能在drawInContext: 中(类似于drawRect)绘制,或者在delegate中的相应方法绘制。
前言 实现原理 CopyTextLabel 通过将canPerformCopyAction置为YES来开启长按复制文本的功能。 效果 ?...在这里插入图片描述 先了解一下UILabel的基本用法 I、UILabel的基本用法 1.1 显示模式 NSLineBreakByWordWrapping = 0, 单词包裹,换行的时候会以一个单词换行...NSLineBreakByTruncatingMiddle // 一行中中间部省略: "ab...yz" */ // 2.0 添加到控制器的view中...[self.view addSubview:label]; } II、 案例:实现长按复制文本的功能 2.1 实现步骤 CopyTextLabel 通过将canPerformCopyAction...置为YES来开启长按复制文本的功能。
UIViewController 创建完成 , 并开始加载到内存中时 , 在这个时刻执行该 viewDidLoad 方法 //一般情况下 是 在该方法中 执行 初始化数据 , 创建控件 等操作 ; -...设置按钮 禁用 启用 , index 为 1 和 5 时 分别启用 和 禁用 指定的按钮 , 其它情况下可以使用两个按钮 if(self.index == 1){ self.lastButton.enabled...: 使用 NSString 的 stringWithFormat 方法 , 设置一个 字符串格式 , 使用 通配符 进行 数据替换 ; 注意 NSArray 的 count 的通配符是 %lu ;...设置按钮 禁用 启用 , index 为 1 和 5 时 分别启用 和 禁用 指定的按钮 , 其它情况下可以使用两个按钮 if(self.index == 1){ self.lastButton.enabled...一个 UILabel , 并查看 该文件 ; 1.使用文本编辑器查看 : 使用 Subline 文本编辑器查看 Storyboard 界面 , 发现 其本质 是一个 纯文本 的 文件 ; 该方式
2,实例方法存在于类的methodList中,类方法存在于元类的methodList中。 实例对象是类的实例,类对象是元类的实例。...基于以上两点可知,类方法在元类的methodList中是以实例方法的姿态存在的!! 3,Runtime的应用 很多人觉得Runtime很高大上、很难学、很难理解、华而不实。...——消息转发流程 (3)提高OC对象序列化与反序列化的效率:Runtime应用——序列化&反序列化 (4)Hook方法进行代码调试:Runtime应用——在不修改原方法的基础上给原方法添加功能 (5)防止在...一般情况下,如果我们需要在某页面进行页面跳转到另外一个页面,那么就在当前页面使用import引入另一页面的文件,然后新建跳转即可。...(cls);//注册该类 //给跳转页(新建的类)的viewDidload方法添加方法实现 Method method = class_getInstanceMethod
iOS文本布局探讨之三——使用TextKit框架进行富文本布局 一、引言 关于图文混排,其实以前的博客已经讨论很多,在实际开发中,经常使用第三方的框架来完成排版的需求,其中RCLabel...二、原生UILabel真的只能渲染文字么? CoreText是一个比较底层且十分强大的文本渲染框架,但是其使用起来并不是十分方便。在较低版本的iOS系统中,要进行富文本排版十分困难。...在iOS6中,系统为UILabel,UITextView等这类文本渲染控件引入了NSAttributedString属性,有了NSAttributedString这个类,创建灵活多彩的文本控件变得十分轻松...首先,iOS7中新添加了一类NSTextAttachment,从类名理解它是一个文本附件,其实也正是如此,NSTextAttachment类可以向文本中添加一些附件,这有些向邮件系统,寄信者可以向邮件中添加附件一同发送出去...三、为富文本附件添加用户交互能力 TextKit框架强大到只使用UILabel就可以完成复杂的富文本布局,但是UILabel有一个致命的缺陷,其无法进行用户交互。
它良好的结合了 UIKit 和 Core Graphics/Quartz: UIKit 的 UILabel 允许你通过在 IB 中简单的拖曳添加文本,但你不能改变文本的颜色和其中的单词。...富文本是什么呢? 富文本格式(RTF)规范是为了便于在应用程序之间轻松转储格式化文本和图形的一种编码方法。...---- 富文本的基本使用方法 诶,标题越来越小了,都4个#号了,说明我扯远了啊。不过要想使用CoreText不会富文本还是不行啊。 来吧。...-initWithString:以NSString初始化一个富文本对象 -setAttributes:range:为富文本中的一段范围添加一些属性,第一个参数是个NSDictionary字典,第二个参数是...;//缩放方法,x轴缩放系数为1,则不变,y轴缩放系数为-1,则相当于以x轴为轴旋转180度 正如之上的背景说的,coreText使用的是系统坐标,然而我们平时所接触的iOS的都是屏幕坐标,所以要将屏幕坐标系转换系统坐标系
领取专属 10元无门槛券
手把手带您无忧上云