應用場景爲一個collectionView上有多個textfield、textView供用戶填寫信息。html
以前輸入項較少時,採起的方法比較粗暴,didSelectItemAtIndexPath時,記下collectionViewCell距離屏幕底部的間距,再與鍵盤高度做比較,根據實際狀況調整collectionView的contentOffset,可是當輸入項較多時這個方法就不行了,須要計算更多collectionViewCell距離屏幕底部的間距,容易出錯。ios
《Text Programming Guide for iOS》-Managing the Keyboard一節中介紹瞭解決辦法,這裏因爲用了Masonry,不方便直接調整frame,稍微變通下便可數據結構
(1)選擇輸入項時記下indexPath,方便後續collectionView滑動操做app
這裏須要注意的是,collectionViewCell裏textField、textView的userInteractionEnabled都設置爲NO,在用戶選中時才成爲第一響應者。ide
(2)得到鍵盤高度,根據鍵盤高度對collectionView調整,並滑動到目標cel的位置工具
(3)鍵盤隱藏時,恢復collectonView的初始約束佈局
有這樣一個應用場景:價格精確顯示到2位小數 ,小數點爲0則不顯示,例如99.00顯示爲99,99.90顯示爲99.9元,直接用NSString的stringWithFormat方法轉換小數點部分的顯示是不符合要求的,會有多餘的0,解決辦法是先轉換獲得包含2位小數的字符串,再特殊處理一下便可將小數部分的0去掉,如圖所示:ui
參考:iOS 浮點數去掉小數點以後的0.00以及價格格式顯示spa
數據來源:中國省市區三級聯的JSON格式 3d
須要注意數據不是最新的,例如北京的密雲縣、延慶縣已經撤縣改區,崇文區、宣武區已經被撤銷合併,根據數據結構這裏將數據用兩個Model來表示了
使用UIPickerView實現,三列數據分別表明省市縣,聯動選擇便可。有三個地方須要注意:
(1)當已有數據,再次進行選擇須要定位到現有數據位置
經過已有數據得到pickerView三列的index值,可是須要注意初始化數據後要先reload後,再經過selectRow方法滾動到指定位置,不然會滾動不到指定位置。
(2)三級聯動
即省/直轄市改變,市、區/縣也要跟着改變,經過更新對應數據集合便可,這裏作的是省/直轄市改變,市、區/縣默認滾動到第一條顯示,市改變,區/縣默認滾動到第一條顯示。
(3)內容樣式修改
默認顯示的內容樣式不符合要求,須要修改其內容樣式,例如文字大小等等,UIPickerView自己是提供了這樣的一個代理方法供咱們去自定義
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元素的約束設置問題。