iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

时间:2021-02-11 00:36:46

    1.表单键盘遮挡

    应用场景为一个collectionView上有多个textfield、textView供用户填写信息。

    之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndexPath时,记下collectionViewCell距离屏幕底部的间距,再与键盘高度作比较,根据实际情况调整collectionView的contentOffset,但是当输入项较多时这个方法就不行了,需要计算更多collectionViewCell距离屏幕底部的间距,容易出错。

  《Text Programming Guide for iOS》-Managing the Keyboard一节中介绍了解决办法,这里由于用了Masonry,不方便直接调整frame,稍微变通下即可

  (1)选择输入项时记下indexPath,方便后续collectionView滑动操作iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    这里需要注意的是,collectionViewCell里textField、textView的userInteractionEnabled都设置为NO,在用户选中时才成为第一响应者。iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

  (2)获得键盘高度,根据键盘高度对collectionView调整,并滑动到目标cel的位置iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View DebuggingiOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

  (3)键盘隐藏时,恢复collectonView的初始约束iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    2.浮点数价格格式化显示

    有这样一个应用场景:价格精确显示到2位小数 ,小数点为0则不显示,例如99.00显示为99,99.90显示为99.9元,直接用NSString的stringWithFormat方法转换小数点部分的显示是不符合要求的,会有多余的0,解决办法是先转换得到包含2位小数的字符串,再特殊处理一下即可将小数部分的0去掉,如图所示:

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    参考:iOS 浮点数去掉小数点之后的0.00以及价格格式显示

    3.省市区选择器

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    数据来源:中国省市区三级联的JSON格式 

    需要注意数据不是最新的,例如北京的密云县、延庆县已经撤县改区,崇文区、宣武区已经被撤销合并,根据数据结构这里将数据用两个Model来表示了

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View DebuggingiOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    使用UIPickerView实现,三列数据分别代表省市县,联动选择即可。有三个地方需要注意:

  (1)当已有数据,再次进行选择需要定位到现有数据位置

    通过已有数据获得pickerView三列的index值,但是需要注意初始化数据后要先reload后,再通过selectRow方法滚动到指定位置,否则会滚动不到指定位置。 

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

  (2)三级联动

   即省/直辖市改变,市、区/县也要跟着改变,通过更新对应数据集合即可,这里做的是省/直辖市改变,市、区/县默认滚动到第一条显示,市改变,区/县默认滚动到第一条显示。iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

  (3)内容样式修改

    默认显示的内容样式不符合要求,需要修改其内容样式,例如文字大小等等,UIPickerView本身是提供了这样的一个代理方法供我们去自定义

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    4.View Debugging

   Xcode本身提供了一些视图调试的小工具 ,画界面的时候调试分析问题很管用,尤其是当界面显示不正确的时候有助于定位问题。Xcode工具栏Debug-View Debugging中能找到这些小工具,从上到下分别是屏幕截图快照、视图分层次析以及显示View的frame等等

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging   

  (1)屏幕截图快照顾名思义就是截取屏幕当前状态保存为照片了

  (2)Capture View Hierarchy这个有助于检查界面的约束、视图层次等

iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging   

  (3)Show View Frames/Show Alignment Rectangles用来显示视图元素的frame或对齐矩形,个人一般用show View Frames这一选项,最后屏幕上各个UI元素周围会多出一个矩形,代表其尺寸大小,对一些元素之间布局显示异常的情况,有助于定位找到UI元素的约束设置问题。