1.表单键盘遮挡

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

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

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

(1)选择输入项时记下indexPath,方便后续collectionView滑动操作

这里需要注意的是,collectionViewCell里textField、textView的userInteractionEnabled都设置为NO,在用户选中时才成为第一响应者。

(2)获得键盘高度,根据键盘高度对collectionView调整,并滑动到目标cel的位置

(3)键盘隐藏时,恢复collectonView的初始约束

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

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

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

3.省市区选择器

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

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

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

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

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

(2)三级联动

即省/直辖市改变,市、区/县也要跟着改变,通过更新对应数据集合即可,这里做的是省/直辖市改变,市、区/县默认滚动到第一条显示,市改变,区/县默认滚动到第一条显示。

(3)内容样式修改

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

4.View Debugging

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

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

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

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

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

  1. iOS开发笔记1:[转]导航栏里的"Back"按钮显示不出来

    最近项目中遇到一个问题,push过去的ViewController的Nav上面没有返回按钮,遂搜索资料,找到了以下文档.经测试i,问题解决. 原文地址:http://www.cnblogs.com/s ...

  2. iOS开发——笔记篇&关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结

    关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 /************************************ ...

  3. iOS开发笔记7:Text、UI交互细节、两个动画效果等

    Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...

  4. iOS开发之多表视图滑动切换示例(仿"头条"客户端)---优化篇

    前几天发布了一篇iOS开发之多表视图滑动切换示例(仿"头条"客户端)的博客,之所以写这篇博客,是因为一位iOS初学者提了一个问题,简单的写了个demo做了个示范,让其在基础上做扩展 ...

  5. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法   单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...

  6. Bootstrap学习笔记(二) 表单

    在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...

  7. iOS开发笔记--什么时候调用layoutSubviews

    iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...

  8. IOS开发笔记(4)数据离线缓存与读取

    IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...

  9. IOS开发笔记 IOS如何访问通讯录

    IOS开发笔记  IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...

随机推荐

  1. ruby -- 问题解决(一)无法连接mysql数据库

     >rails g controller home index  运行该命令时无法连接mysql 先下载配置文件:mysql-connector-c-noinstall-6.0.2-win32. ...

  2. Hadoop入门进阶课程12--Flume介绍、安装与应用案例

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan  ...

  3. python面试题大全(二)

    转载请注明出处http://www.cnblogs.com/goodhacker/p/3387027.html 1.python中类方法.类实例方法.静态方法有何区别? 区别: 类方法和静态方法都可以 ...

  4. 免费下载:320+ 手绘风格 Apple iOS7 图标

    Themify 图标是一套用在网页设计和应用程序的图标,包括 320+ 手工制作的像素完美的苹果  iOS7 图标中汲取灵感.这些图标完全免费,您可以用于任何目的,无论是个人或商业. 您可能感兴趣的相 ...

  5. Java魔法堂:String.format详解

      目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六.对浮点数进行格式化     七.对日期时间进行格式化 ...

  6. 二元查找树转变成排序的双向链表之C#算法实现

    此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试 ...

  7. 百度分页样式代码 css+c#

    通过c#输出html分页代码: /// <summary> /// 返回分页Html代码 /// </summary> /// <param name="pag ...

  8. Sql Server来龙去脉系列 必须知道的权限控制基础篇

    题外话:最近看到各种吐槽.NET怎么落寞..NET怎么不行了..NET工资低的帖子.我也吐槽一句:一个程序猿的自身价值不是由他选择了哪一门技术来决定,而是由他自身能创造出什么价值来决定. 在进入本篇内 ...

  9. C#类的继承相关总结

    1.子类继承父类,会拥有父类中所规范的所有成员,但是只能是使用其中的公共成员 2.实现了继承,可以做到代码的冗余,做到代码的重用 3.实现了继承,可以方便代码的扩展与修改 4,当子类拥有与父类相同签名 ...

  10. IEnumerable接口

    IEnumerable接口顾名思义就是 可枚举的,可列举的. 接口也很简单,返回一个 枚举器对象 IEnumerator . [ComVisible(true), Guid("496B0AB ...