ios开发文本,iOS开发文档
iOS开发怎样实现全系统的文本复制粘贴
在开发的过程中,我们有时候想要在A应用中复制一段文本,然后在B应用中粘贴使用,这就需要使用到系统级的复制粘贴功能了。在iOS中,实现全系统复制功能的代码其实很简单:
目前创新互联已为上千多家的企业提供了网站建设、域名、雅安服务器托管、成都网站托管、企业网站设计、拉萨网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
UIPasteboard *pb = [UIPasteboard generalPasteboard];
pb.string = @"hello,world!";
接下来我们看一下效果:
在这里我就先写这么多,接下来我会把 UIPasteboard 类的详细使用示例总结一下
iOS富文本实现(-):私密阅读效果
废话不多说,咱们直接先看效果!看是不是咱想要的哈
就像上图所示的示例:
1.项目需求
项目中要实现私密阅读信息的功能,即一次只能查看一行文字功能。当我们手指点击或者滑动到某一行文字的时候,该行文字会显示出来,而当我们手指离开该行的时候,文字会隐藏起来。
主要目的是, 该App要防止用户截屏,真正做到隐私无泄漏。
2.大致思考说明
明白了我们的核心需求后,那么对这个问题的思考点落脚:
首先要实现文本的行数的监听控制,那么自然要用到label中的 富文本展示功能;
其次是覆盖到的文本位置区域要尽可能的准确无误;
最后当然是手指滑动以及点击过程中的监听交互与覆盖层的处理逻辑。
针对以上问题,要怎么来解决呢?
总的来说,基本从实现该功能来说,其实可以简单总结为三步曲
1.富文本文字的设置
这块主要涉及对文字大小,字与字的间距,行间距,甚至未来的段间距等相关的设置,这是富文本研究的基础工作。
2.遮盖层的选择研究
关于遮盖层方面,其实一般开发人员就直接会去选择View去处理。但是如果从性能角度考虑,这层遮盖层仅仅是只有遮盖功能,并没有事件的响应以及其他复杂业务逻辑的功能,这边考虑的是用layer来处理,如下所示:
layer来处理的话,有个问题会出现,即对layer身上没有tag标签可以标记,所以对于初次展示的遮盖依然需要用View来遮盖(即红色遮盖的部分),用户只要点击过该行之后,就是下面的Layer(灰色遮盖)。
灰色遮盖Layer会长期存在,而红色遮盖View则会在用户点击了改行之后就会永远消失(红色遮盖类似标记用户已读未读的功能)。
3.手势添加的策略
手势添加是个小问题,重要的是手势添加之后如何和View关联处理的逻辑,所以这里就只展示手势点击后的策略,即如下所示:
1.文字行数计算的细节
首先是关于文字的高度计算特点,由于系统默认的Label是没有纵向居中展示的功能,所以这里继承了MyLabel的自定义Label,来实现自己的Label可以居上显示,从而可以在后续为遮盖层实现精准覆盖到对应的文字上。
这也算是站在巨人的肩膀上做开发了哈!
2.文字行数计算的说明
如下所示,关于文字行数的计算,这里的注释写的很明白!为了方便大家理解,这里就再以一个案例来聊聊,这里注意的细节。
首先如图的singleSize为单个文字的高度。注意这里传的字典中一定不要有行高传过去,不然后续计算就比较麻烦。
另外一点就是 如图的lineCount == 1的时候为什么还要加上个行高和实际字体高度的比较呢?
核心原因是因为一行单纯文字假设是20高度,行高10,则行高为30。那么一行文字展示为30,而二行文字展示为20+10+20=50,此时用一行文字30/行高30 = 1,而二行文字50/30 得到的integer数值依然为1。所以就必须要进一步文字的高度和行高是不是刚好。但考虑文字的高度比如本次用的是18号文字,字高位21.xxxx。这样的情况。不知道其他的文字和行高会不会出现后面有误差的情况。此时倘若文字的高度大于行高倒还好说。因为结果是1.多,即为1;而反之的话,为0.9多,就会出现行数为0的尴尬情形。
所以后续在进行行数计算的时候,实际也是考虑了以上的情形, 在计算出来的lineCount基础上加1.因为最后一行是没有行间距的。如下所示实际的行数为lineCount + 1。
2.动态计算一片字所占方法的枚举
这块分析和研究方面情况容易忽略,顺手说一下,因为在后面其他地方有遇到过这样的问题,即如下所示,在Label的boundingRectWithSize方法中有options,是来让我们告诉系统,你想要获得这串文字的整块的布局还是说是某一行甚至某一个字的大小返回情况。
这块个人写了2个方法如下所示,Demo中没有,一个是返回一块文字的尺寸,一个是返回一行文字的尺寸。核心是options值的不同。
4.小不足点1个
如下所示的,在点击手势中由于无法监听到其结束时的状态,所以用长按手势来代替。即对于点击手势它的gesture.state只有UIGestureRecognizerStateBegan的状态,那么问题如果非要用点击手势,就会出现,用户点击后,无法监听到其点击手势结束时把对应点击位置的Layer给显示出来的逻辑,所以考虑用长按手势来代替,只是把长按时间如下设置为0.05s。
所以如果发现有这块秒速的点击无法出现效果,还望大家一起思考这个问题的解决方案,谢谢!
过去3年多以来,由于制定了很多计划,但由于各种原因所致,技术的学习时有时无。
就像一个笑话说的,我们有很多计划,简称为plan。但在实际完成过程中只完成了个p,因为lan,哈哈哈!
希望未来可以重新开启技术之窗的对话,欢迎大家捧场哈!
这里附上一个gitee的项目连接地址: 我的富文本之DDRichTextDemo
一并把一些参考资料附上:
1.iOS富文本(NSAttributedString)---尽力弄全了
2.iOS开发之UILable文字 居上对齐/居中对齐/居下对齐
3.IOS如何使用CAShapeLayer实现复杂的View的遮罩效果
有问题欢迎评论区见哈!
iOS 开发-UILabel(文本)的使用
1. 创建CGRectrect = CGRectMake(100,200,50,50);
UILabel *label = [[UILabelalloc]initWithFrame:rect];
2. text 设置和读取文本内容,默认为nil
label.text = @”文本信息”; 设置内容
NSLog(@”%@”, label.text) 打印label内容
3. textColor 设置文字颜色,默认为黑色
lable.textColor = [UIColor redColor];
4. font 设置字体大小,默认17
label.font = [UIFont systemFontOfSize:20]; 跟随系统默认字体
label.font=[UIFont boldSystemFontOfSize:20]; 设置字体加粗字号为20的label
label.font=[UIFont fontWithName:@"Arial"size:16]; 指定字体的方法, 还有⼀一种从外部导入字体的方法
5. textAlignment 设置标签文本对齐方式
label.textAlignment = NSTextAlignmentCenter; 设置文本内容居中显示
label.textAlignment = NSTextAlignmentLeft; 设置文本内容居左显示
label.textAlignment = NSTextAlignmentRight; 设置文本内容居右显示
6. numberOfLines 设置文本最多显示行数, 为0则表示行数不限(无限行)
label.numberOfLines = 2; 设置文本内容行数为2行
7. enabled 只是决定了Label的绘制方式,将它设置为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的, 默认为YES;
label.enable = NO;
8. highlighted 是否高亮显示,默认为NO
label.highlighted = YES;
label.highlightedTextColor = [UIColor orangeColor]; 高亮显示时的文本颜色
9. ShadowColor 设置阴影颜色
[label setShadowColor:[UIColorblackColor]];
10. ShadowOffset 设置阴影偏移量
[label setShadowOffset:CGSizeMake(-1,-1)];
11. baselineAdjustment
如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为。
label.baselineAdjustment = UIBaselineAdjustmentNone;
UIBaselineAdjustmentAlignBaselines = 0默认,文本最上端与中线对齐。
UIBaselineAdjustmentAlignCenters,文本中线与label中线对齐。
UIBaselineAdjustmentNone,文本最低端与label中线对齐。
12. Autoshrink 是否自动收缩FixedFontSize 默认,如果Label宽度小于文字长度时,文字大小不自动缩放minimumScaleFactor 设置最小收缩比例,如果Label宽度小于文字长度时,文字进行收缩,收缩超过比例后,停止收缩。minimumFontSize 设置最小收缩字号,如果Label宽度小于文字长度时,文字字号减小,低于设定字号后,不再减小。//6.0以后不再使用了。
label.minimumScaleFactor = 0.5;
13. adjustsLetterSpacingToFitWidth
改变字母之间的间距来适应Label大小
label.adjustsLetterSpacingToFitWidth = NO;
14. lineBreakMode 设置文字过长时的显示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显示,后面部分省略不显示。
label.lineBreakMode=NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。
label.lineBreakMode=NSLineBreakByTruncatingHead;前面部分文字以……方式省略,显示尾部文字内容。
label.lineBreakMode=NSLineBreakByTruncatingMiddle;中间的内容以……方式省略,显示头尾的文字内容。
label.lineBreakMode=NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略,显示头的文字内容。
label.lineBreakMode=NSLineBreakByWordWrapping;以单词为显示单位显示,后面部分省略不显示。
15. adjustsFontSizeToFitWidth 设置字体大小适应label宽度
label.adjustsFontSizeToFitWidth = YES;
16. attributedText 设置标签属性文本。
NSString*text=@"first";
NSMutableAttributedString *textLabelStr = [[NSMutableAttributedStringalloc]initWithString:text];
[textLabelStrsetAttributes:@{NSForegroundColorAttributeName[UIColorlightGrayColor],NSFontAttributeName: [UIFontsystemFontOfSize:17]} range:NSMakeRange(11,10)];
label.attributedText = textLabelStr;
17. 竖排文字显示每个文字加一个换行符,这是最方便和简单的实现方式。
label.text=@"请\n竖\n直\n方\n向\n排\n列";
label.numberOfLines = [label.text length];(可以直接设置成数字)
18. 计算UIlabel 随字体多行后的高度
CGRect bounds = CGRectMake(0,0,200,300);
heightLabel = [label textRectForBounds:bounds limitedToNumberOfLines:20];计算20行后的Label的Frame
NSLog(@"%f",heightLabel.size.height);
19. UILabel根据字数多少自动实现适应高度
UILabel*msgLabel = [[UILabel alloc] initWithFrame:CGRectMake(15,45,0,0)];
msgLabel.backgroundColor=[UIColor lightTextColor];
[msgLabel setNumberOfLines:0];
msgLabel.lineBreakMode = UILineBreakModeWordWrap;
msgLabel.font = [UIFont fontWithName:@"Arial"size:12];
CGSize size = CGSizeMake(290,1000);
msgLabel.text = @"一个人 一首歌 一杯酒 一支烟 一部手机 一台电脑 一杯清茶 一路清贫 一路走 一路停 一个远方 一个你还没到来 万世孤独";
CGSize msgSie = [msgLabel.text sizeWithFont:fontsconstrainedToSize:size];
[msgLabel setFrame:CGRectMake(15,45,290,msgSie.height)];
20. 渐变字体
LabelUIColor *titleColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"btn.png"]];
NSString *title = @"Setting";
UILabel*titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,80,44)];
titleLabel.textColor=titleColor;
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.backgroundColor=[UIColor clearColor];
[self.view addSubview:titleLabel];
21. Label添加边框
titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];
titleLabel.layer.borderWidth = 2;
22. 设置label内边距
.h文件
@interface DrawRectLabel : UILabel
@property ( nonatomic , assign ) UIEdgeInsets edgeInsets;
@end
.m文件 需要重写方法: - ( void )drawTextInRect:(CGRect)rect
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines{
UIEdgeInsetsinsets = self .edgeInsets;
CGRect rect = [ super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets)limitedToNumberOfLines:numberOfLines];
rect.origin.x -= insets.left;
rect.origin.y -= insets.top;
rect.size.width += (insets.left+ insets.right);
rect.size.height+= (insets.top+ insets.bottom);
return rect;
}
iOS开发:检测UITextField文本框的状态
全局登录button
1.1需要在- (void)viewWillAppear:(BOOL)animated方法添加通知中心
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//添加通知中心
//添加文本框通知中心
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gosave:) name:UITextFieldTextDidChangeNotification object:nil];
//selector是选择器,Observer是观察者,name是检测的类型 object填nil就行
//这里检测的是文本框text值改变的时候,另外还可以检测:
UITextFieldTextDidBeginEditingNotification;开始编辑时
UITextFieldTextDidEndEditingNotification;结束编辑时
UITextFieldTextDidChangeNotification;值改变时
}
1.2在当前视图控制器的.m中实现gosave方法
- (void)gosave:(NSNotification *) Notification{
UITextField * textField = Notification.object;
if (self.phoneTextFld.text.length == 11 self.codeTextFld.text.length == 4 [XSTTools judgeWithPhone:self.phoneTextFld.text andWithPwd:nil andWithCode:self.codeTextFld.text andShowView:self.view]) {
//这个if判断是我自己项目需求写的,你可以根据自己项目来写,只需要在满足条件的时候将button的selected设置为YES不满足条件设置为NO即可
self.loginButton.selected = YES;
self.loginButton.userInteractionEnabled = YES;
}else{
1.3移除通知中心
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
//移除通知中心
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
[self.timer invalidate];
}
1.当然上面只是一个很小的用法,你可以扩展其他用法,比如还可以检测键盘的高度来实现对uikit控件的frame上移和下拉。这个用法主要用在当textField文本框被弹出键盘遮挡时。
ps:需要注意的是:
1.1添加通知中心一定要写在视图即将显示的方法-(void)viweWillApper:(animated)里面,不能写在-(void)viewDidLoad里面。
1.2视图即将消失的时候将通知中心移除,不然会有内存泄露。
因为:viewDidLoad只会在UIViewController的实例化对象push或者present的时候执行一次。所以当我们返回这个视图的时候通知中心已经移除了,就会出错。
iOS 开发-UITextView(第二种输入框)的使用
text 设置文本显示内容
backgroundColor 设置背景色
scrollEnabled 当文本内容超出视图边框时是否允许滑动, 默认为YES
editable 设置是否允许编辑文本内容 默认为YES(可编辑)
delegate 设置代理方法的实现类
font 设置字体名字和大小
returnKeyType 设置键盘上的return键的类型
keyboardType 键盘类型
textAlignment 文本内容居左还是居中还是居右
dataDetectorTypes 显示数据类型的连接模式(如电话号码、网址、地址等)
textColor 设置文本内容字体颜色
autocapitalizationType 输入类型
autocorrectionType 是否自动更正
secureTextEntry 安全文本输入
keyboardAppearance 键盘外观
- (BOOL)textViewShouldBeginEditing:(UITextView*)textView; 将要开始编辑
- (BOOL)textViewShouldEndEditing:(UITextView*)textView; 将要结束编辑
- (void)textViewDidBeginEditing:(UITextView*)textView; 开始编辑
- (void)textViewDidEndEditing:(UITextView*)textView; 结束编辑
- (BOOL)textView:(UITextView*)textViewshouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text; 内容将要发生改变编辑
- (void)textViewDidChange:(UITextView*)textView; 内容发生改变编辑
- (void)textViewDidChangeSelection:(UITextView*)textView; 焦点发生改变
4. UITextView限制字数
文章标题:ios开发文本,iOS开发文档
当前地址:http://pwwzsj.com/article/dsdhhei.html