0、写在前面

1、小技巧

  UILabel类:

    1-1-1)、设置行间距富文本,有省略号要求的,需要再次设置省略(初始化时设置的会失效)。

  UITextField类:

    1-2-1)、清空按钮。

  UITextView类:

    1-3-1)、UITextView只能x轴居中,y轴需要手动调。

  UITextField、UITextView类共有:

    1-4-1)、在键盘上面显示一个右边有“完成”按钮的ToolBar。

    1-4-2)、协议 UITextInputTraits(自动大写、纠错、键盘相关)。

    1-4-3)、点击跳转到新页面

2、字体计算、自适应

3、键盘相关

0、写在前面

  1、UILabel:

    1、没有自带选择、复制功能

    2、无占位符

    3、多行

  2、UITextField:

    1、

    2、有占位符

    3、一行

  3、UITextView:

    1、

    2、无占位符

    3、多行

  N、富文本,再次刷新,需要先置nil

1、小技巧:

  UILabel类:

    1-1-1)、设置行间距富文本,有省略号要求的,需要再次设置省略(初始化时设置的会失效)。

// 最后面的,以"..."结束
self.contentLabel.lineBreakMode = NSLineBreakByTruncatingTail;

  UITextField类:

    1-2-1)、清空按钮。

// 当编辑时才出现
self.inputTF.clearButtonMode = UITextFieldViewModeWhileEditing;

    1-2-N)、在tableView中响应。

      1)、比如,输入用户名的cell,UITextField输入框在右边,左边有@“用户名”的label。想要整个cell响应输入框。可在cell的点击row代理中,获取当前cell的textField,然后becomeFirstResponder,用户体验好点。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// 获取cell
KJPersonalSettingCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// 弹出输入法
[cell.inputTF becomeFirstResponder];
}

      2)、比如,生日用datePicker,选中显示在cell,如果是用UITextField(考虑cell复用:如当前cell样式右边无label,有UITextField),可设置UITextField的enabled = NO,然后用在cell的点击row代理中跳出datePicker。

// cell复用,刷新数据中设置为NO,就不响应输入事件
self.inputTF.enabled = NO; // 然后由cell点击事件弹出 datePicker
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { }

  UITextView类:

    1-3-1)、UITextView只能x轴居中,y轴需要手动调

        --修改自简书 《IOS UITextView内容垂直居中方法》 --木头Lee

- (void)contentSizeToFit
{
//先判断一下有没有文字(没文字就没必要设置居中了)
if([msgTextView.text length]>0)
{
//textView的contentSize属性
CGSize contentSize = msgTextView.contentSize;
//textView的内边距属性
UIEdgeInsets offset; //如果文字内容高度没有超过textView的高度
if(contentSize.height <= msgTextView.height)
{
//textView的高度减去文字高度除以2就是Y方向的偏移量,也就是textView的上内边距
CGFloat offsetY = (msgTextView.height - contentSize.height)/2;
offset = UIEdgeInsetsMake(offsetY, 0, 0, 0);
} //根据前面计算设置textView的ContentSize和Y方向偏移量
[msgTextView setContentInset:offset];
}
}

  UITextField、UITextView类共有:

    1-4-1)、在键盘上面显示一个右边有“完成”按钮的ToolBar。

UIToolbar *numberToolBar= [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, kSCREEN_WIDTH, 40)];
numberToolBar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
[[UIBarButtonItem alloc]initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
nil];
//numberToolBar.tintColor=[UIColor redColor];
self.inputTF.inputAccessoryView = numberToolBar; - (void)doneWithNumberPad
{ }

    1-4-2)、协议 UITextInputTraits(自动大写、纠错、键盘相关):

      ①、autocapitalizationType:自动首字母大写

      ②、autocorrectionType:自动纠错

      ③、spellCheckingType:拼写检查

      ④、keyboardType:键盘类型

      ⑤、keyboardAppearance:键盘颜色样式

      ⑥、returnKeyType:返回的按键“字”:发送、下一个...

      ⑦、enablesReturnKeyAutomatically:当文字输入长度为0,失能键盘的return,但文字输入长度大于0,使能键盘的return

      ⑧、secureTextEntry:密码输入,输完一段时间、或输入下一个字体,会变成*

      ⑨、textContentType:把自己的通讯录内容,变成键盘上的一个ToolBar按钮,快速填入。第三方键盘好像不支持。

    1-4-3)、点击跳转到新页面

      ①、设置代理

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
SearchVC *vc = [[SearchVC alloc]init];
[self.navigationController pushViewController:vc animated:YES];
return NO;
} // 同
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;

      ②、跳转过去,跳出键盘

-(void)viewWillAppear:(BOOL)animated{
[self.searchTF becomeFirstResponder];
}

  

2、字体计算、自适应

  1)、固定的Frame,自适应Font大小,如数量增减,1和1000。

[label1 setAdjustsFontSizeToFitWidth:YES];

  2)、固定的Font,自适应Frame,用于信息类显示

[label2 sizeToFit];

  3)、固定的Font,获取自适应Frame值,反过来设置Label的Frame,用于信息类显示。这里的100是等下设置Label的width,也是返回的rect.frame.size.width

CGRect rect = [templabel.text boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:templabel.font} context:nil];

  后续补充:

    "3)" 有误,100为限制的最大宽度,但是,如果不足100,还是会返回正确的值。不是都返回100。

    "1)"、"2)" ,自适应尺寸的,要记得设置size。没有边界如何自适应。(因为一般在约束Lable,都没约束size,故特意写下)

3、键盘相关

  0)、键盘强制显示、隐藏

// 成为第一响应(弹起)
[self.tfView becomeFirstResponder]; // 取消第一响应(隐藏)
[self.tfView resignFirstResponder];

  1)、键盘事件通知

    1-1)、弹出键盘可能盖住TextField。监听键盘的通知

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoradChangeAction:) name:UIKeyboardWillChangeFrameNotification object:nil];

    1-2)、keyBoradChangeAction方法里接收通知,duration是键盘动画时间,keyBoardNewY是键盘当前的y轴位置,keyBoardOldY主要和当前键盘位置比较。(接着要移动评论框或者移动后面的ScrollView都可以)

- (void)keyBoradChangeAction:(NSNotification*)noti
{
CGFloat duration = [[noti.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGFloat keyBoardOldY = [[noti.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey]CGRectValue].origin.y;
CGFloat keyBoardNewY = [[noti.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].origin.y; //1、通过重置约束条件
//1-1-1)、xib拉过来 或 原生约束
//self.theBottomSpace.constant = ?;
//1-1-2)、Masonry约束make返回的值
//theBottomWidth.mas_equalTo();
//1-1-3)、Masonry代码更新约束
//self.theBottomview mas_updateConstraints [UIView animateWithDuration:duration animations:^{ //1-2)、更新约束( 在1-1-1 或 1-1-2 或 1-1-3 的基础上跟新约束 )
//[self.view layoutIfNeeded]; //2、通过改变Frame
if ( (int)(keyBoardOldY - keyBoardNewY) > 0 )
{
[self showKeyBoardModelWithY:keyBoardNewY];
}
else
{
[self showNomalModel];
} }];
}

  2)、dealloc记得移除

[[NSNotificationCenter defaultCenter]removeObserver:self];

  3)、touchesBegan:withEvent && scrollViewDidScroll -->屏幕点击&&屏幕滑动要取消编辑状态

//不建议,有的View有偏移量的,会有问题。
//[self.view endEditing:YES]; //谁监听的,让谁去放弃第一响应
[self.tfView resignFirstResponder];

  后续补充:如有用IQKeyboard ,需要关闭

- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// 如果是view,可以加在init
[[IQKeyboardManager sharedManager] setEnable:NO];
} -(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
// 如果是view,可以加在dealloc
[[IQKeyboardManager sharedManager] setEnable:YES];
}

  后续补充:现在有出现一种情况,就是cell有响应点击事件,而又想通过点击其他地方取消键盘,结果却进入了cell的点击事件里。

       解决方法:1、可考虑加个透明、有手势识别的View ?

            2、跳转到新的输入页面。绝大部分APP的做法,同时还能多显示,输入记录等信息!

  

  


iOS:文字相关(19-01-08更)的更多相关文章

  1. 19 01 08 javascript 初学

    变量 JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定. 定义变量需要用关键字 'var' 变量类型 5种基本数据类型:1.number 数字类型2.string ...

  2. [转] iOS文字排版(CoreText)那些事儿

    文章转载自 http://www.cocoachina.com/applenews/devnews/2014/0521/8504.html iOS文字排版(CoreText)那些事儿 转自阿毛的蛋疼地 ...

  3. iOS回顾笔记( 01 )

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  4. iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  5. HTML连载13-CSS基本格式以及文字相关的属性

    一.CSS格式 1.注意点: (1)style标签必须写在head标签的开始标签和结束标签之间(也就是必须和title标签师兄弟关系) (2)style标签中的属性type属性其实可以不写,默认就是t ...

  6. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  7. iOS网络相关零散知识总结

    iOS网络相关零散知识总结 1. URL和HTTP知识 (1) URL的全称是Uniform Resource Locator(统一资源定位符). URL的基本格式 = 协议://主机地址/路径   ...

  8. 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化

    建议19:使用更有效的对象和集合初始化 依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项. 对象初始化: class Person { ...

  9. 19 01 15 js 尺寸相关 滚动事件

    尺寸相关.滚动事件 1.获取和设置元素的尺寸 width().height() 获取元素width和height innerWidth().innerHeight() 包括padding的width和 ...

随机推荐

  1. react项目 路径优化

  2. 移动端App开发 - 02 - iPhone/iPad/Android UI尺寸规范

    移动端app开发 - iPhone/iPad/Android UI尺寸规范 本笔记抛去无用的前期分析什么的,全是干货,简洁干练 本笔记不单独针对 ios 或者 Android,两种都介绍,当然我们实际 ...

  3. 网页简单布局之结构与表现原则(HTML/CSS)

    结构 样式 行为真正的分离 前端初级人员会在页面上单纯的用各个div把相关内容独立开: 前端中级人员明白相关属性的设置会给元素带来什么改变,从而减少div的书写: 前端高级人员会以及其简单的和稳定的方 ...

  4. RAP, 高效前后端联调框架,接口文档管理工具

    RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多, ...

  5. 如何写一个能在gulp build pipe中任意更改src内容的函数

    gulp在前端自动化构建中非常好用,有非常丰富的可以直接拿来使用的plugin,完成我们日常构建工作. 但是万事没有十全十美能够完全满足自己的需求,这时我们就要自己动手写一个小的函数,用于在gulp ...

  6. 排查 Azure 虚拟机的远程桌面连接问题

    与基于 Windows 的 Azure 虚拟机 (VM) 的远程桌面协议 (RDP) 连接可能会因各种原因而失败,使用户无法访问 VM. 问题可能出在 VM 上的远程桌面服务.网络连接或主计算机上的远 ...

  7. js变量作用域--变量提升

    1.JS作用域 在ES5中,js只有两种形式的作用域:全局作用域和函数作用域,在ES6中,新增了一个块级作用域(最近的大括号涵盖的范围),但是仅限于let方式申明的变量. 2.变量声明 var x; ...

  8. Oracle11g服务详细介绍及哪些服务是必须开启的

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/DaisyLoveZly/article/details/79463713 七个服务的含义分别为:1. ...

  9. Java代码实现对Azkaban的Flow进行设置定时

    代码如下: public class CurlToAzkaban{ public static void scheduleExecute(String flow, String cronExpress ...

  10. PHPWAMP自启异常,服务器重启后Apache等服务不会自动重启的原因分析

    在使用“PHPWAMP自动任务”时,不少学生遇到如下问题: “phpwamp绿色集成环境重启动电脑(服务器)后,不会自动启动网站服务” (如果是其他环境或是自己搭建时遇到此问题,也是可以用此法解决) ...