UIPickerView

UIPickerView基本使用

  • 控件PickerView,拖線

  • 設(shè)置數(shù)據(jù)源,設(shè)置代理

    • self.pickView.dataSource = self
    • self.pickView.delegate = self
  • 遵守協(xié)議

    • UIPickerViewDataSource
    • UIPickerViewDelegate
  • 實現(xiàn)數(shù)據(jù)源方法

    • 共有多少列:numberOfComponentsInPickerView:
    • 每一列有多少行:numberOfRowsInComponents:
  • 實現(xiàn)代理方法

    • widthForComponents:每一列的寬度
    • rowHeightForComponents:每一行的行高
    • titleForRow:forComponent:每一列的每一行展示什么標(biāo)題
    • pickerView:attributeedTitleForRow:forComponent:每一列的每一行展示帶有屬性的標(biāo)題(屬性:文字的大小顏色)
    • pickerView:viewForRow:forComponent:reusingView:每一列的每一行展示視圖
    • pickerView:didSelectedRow:inComponent:當(dāng)選中某一列的某一行的時候會自動調(diào)用
  • 展示數(shù)據(jù)

    • 定義數(shù)據(jù)的數(shù)組屬性蒜鸡,懶加載
    • 獲取plist路徑
    • 從路徑當(dāng)中加載數(shù)組
  • Label展示選中的數(shù)據(jù)

    • didSelectedRow:InComponent:
    • 設(shè)置默認(rèn)

自定義鍵盤

  • 搭建界面

  • textField,只能選擇蜓洪,不能輸入(攔截用戶輸入)

    • 攔截文本框纤勒,設(shè)置textField代理
    • 設(shè)置代理,self.countryTextF.delegate = self
    • 遵守協(xié)議<UITextFieldDelegate>
    • 實現(xiàn)代理方法
      • textFieldShouldBeginEditing:是否允許開始編輯 YES
      • textFieldDidBeginEditing:開始編輯的時候調(diào)用隆檀,成為第一響應(yīng)者彈出鍵盤
      • textFieldShouldEndEditing:是否允許結(jié)束編輯摇天,如果設(shè)置為NO,就出不來了,所以要設(shè)置為YES
      • textFieldDidEndEditing:當(dāng)結(jié)束編輯的時候調(diào)用
      • textField:shouldChangeCharactersInRange:replacementString:是否允許改變字符,NO
  • 點擊textField彈出自定義的鍵盤

    • show in finder -> 新建文件夾 -> 把文件夾拖到工程里面 ->創(chuàng)建自定義類
    • 從storyboard或者xib綁定類的刚操,加載完畢后闸翅,都會調(diào)用awakeFromNib方法
    • 修改鍵盤類型self.inputView輸入的視圖,默認(rèn)是系統(tǒng)的鍵盤
    • 創(chuàng)建pickerView:alloc/init
    • 設(shè)置pickView的數(shù)據(jù)源和代理菊霜,遵守協(xié)議
    • 實現(xiàn)pickerView代理方法
    • self.inputView = pickerView
  • 通過代碼,彈出pickerView济赎,封裝的思想

    • 重寫initWithFrame:方法
    • 設(shè)置pickView的數(shù)據(jù)源和代理鉴逞,遵守協(xié)議
    • 實現(xiàn)pickerView代理方法
    • self.inputView = pickerView
  • 注意:在同一個類中,把相同的代碼司训,寫到同一個方法當(dāng)中构捡,減少代碼量,高內(nèi)聚

  • pickerView內(nèi)部展示國旗數(shù)據(jù)

    • 創(chuàng)建模型壳猜,加載plist文件勾徽,字典轉(zhuǎn)模型
    • 驗證數(shù)據(jù)是否加載成功
    • 列數(shù):1
    • 行數(shù):self.flagArray.count;
    • 每一行展示的UIView:pickerView:viewForRow:forComponent:reusingView:
      • xib描述view
        • 綁定view的類
      • 創(chuàng)建flagView
        • loadNibName:owner:options:
        • [0]
    • 取出數(shù)據(jù),把數(shù)據(jù)給view,讓view展示數(shù)據(jù)
      • 取出模型
      • flagV中提供一個模型
      • return flagView;
  • 設(shè)置行高

    • pickerView:rowHeightForComponent:
  • KVC的底層實現(xiàn)

    • 拿字符串與當(dāng)前類的屬性進(jìn)行匹配统扳,如果匹配到喘帚,就給該屬性賦值。
    • setValuesForKeyWithDictionary:
    • 遍歷字典[dict enumerateKeysAndObjectsUsingBlock:^(){
      內(nèi)部調(diào)用setValue:obj ForKeyPath:key
      1.去找有沒有跟key值相同名稱的set方法咒钟,就會調(diào)用set方法吹由,把obj傳入
      2.如果沒有set方法,那么它會去找有沒有相同名稱并且?guī)в邢聞澗€的成員屬性朱嘴,如果有就會給該屬性賦值
      3.如果也沒有帶有下劃線的成員屬性倾鲫,有沒有跟它相同名稱的成員屬性
      4.如果還沒有跟它相同名稱的成員屬性粗合,就會調(diào)用setValueForUndefinedKey:
      5.如果沒有實現(xiàn)setValueForUndefinedKey:就直接報錯

    }]

  • KVO的底層實現(xiàn)

    • 耗性能,少用KVO
    • 原理:監(jiān)聽某個屬性值的改變
    • 在運(yùn)行的過程中派生一個類乌昔,在這個類中隙疚,有一個屬性,就是你要監(jiān)聽的屬性磕道,會在屬性里重寫set方法供屉,在set方法內(nèi)部,調(diào)用obsever的方法
  • 代碼優(yōu)化

    • 不要在view里面進(jìn)行邏輯運(yùn)算捅厂,把運(yùn)算寫到模型里面贯卦,賦值的時候,直接賦值焙贷,比如icon賦值
    • 重寫icon的set方法
- (void)setIcon:(UIImage *)icon{ 
    if ([icon isKindOfClass:[NSSting class]]){
    UIImage *image = [UIImage imageNamed:(NSString*)icon];
    _icon = image;
    }else{
    _icon = icon;
    }
}       
  • 滾動過程中撵割,把國家顯示到文本框中
    • 代理didSelectRow:
    • 取出當(dāng)前模型
    • self.text = item.name;

UIDatePicker

  • 生日鍵盤
  • 自定義鍵盤
    • awakeFromNib
    • ininWithFrame:
    • 修改鍵盤類型
      • UIDatePicker
      • 修改日期模式
      • .datePickerMode = ModeDate
      • 修改地區(qū)
      • .locale = [NSLocale localeWithLocalIdentifier:@"zh"]
      • iso編碼
  • 滾動過程當(dāng)中,把日期顯示到文本框中去
    • UIDatePicker沒有代理
    • target:繼承UIControl
    • pickView addTarget:action:forControlEvent:
    • 事件類型:可以通過拖線的方式辙芍,看event有哪些
      • 獲取當(dāng)前datepick的日期
      • NSDate * currentDate = datepick.date
      • 把日期轉(zhuǎn)成字符串
      • NSDateFormatter alloc/init
      • .dateFormat= @"yyyy-MM-dd"
      • stringFromDate:
      • 給當(dāng)前文本框賦值
      • self.text = dateString

城市鍵盤

  • 自定義textField
    • awakeFromNib
    • initWithFrame:
    • 設(shè)置代理
    • 遵守協(xié)議
    • 實現(xiàn)代理方法
  • 展示數(shù)據(jù)
    • 創(chuàng)建模型
    • 懶加載
    • 字典轉(zhuǎn)模型
  • 數(shù)據(jù)源代理方法
    • 兩列

    • 第0列有多少行

      • self.proviceArray.count
    • 第1列有多少行

      • 定義一個屬性啡彬,記錄當(dāng)前選中的是哪個省份
      • 取出模型self.proviceArray[self.provinceIndex]
      • 當(dāng)前選中省份下,城市的個數(shù)
        • provinceItem.cities.count;
    • 每一列每一行展示什么內(nèi)容

      • 第0列:返回省份的名稱
      • 省模型:self.provinceArray[row]
      • return item.name
      • 第1列:選中省份下城市的名稱
      • self.provinceArray[self.provinceIndex]
      • return provinceItem.cities[row];
  • 滾動省份故硅,變化城市名稱
    • didSelectRow:
    • 滾動第0列開始做處理
    • 更新index
    • self.provinceIndex = row
    • 變數(shù)據(jù),刷新列表(重新調(diào)用數(shù)據(jù)源代理方法)
    • reloadAllComponents
    • 當(dāng)滾動完畢之后庶灿,讓第一列選中第0行
    • selectRow:inComponent:animated:
  • 省份的名稱和城市的名稱顯示到textF中
    • 省份的模型self.provinceArray[self.provinceIndex]
    • provinceItem.name;
    • 獲取當(dāng)前選中省份下,當(dāng)前選中的城市
      • 獲取當(dāng)前第一列選中的是哪一行
      • 獲取第一列行號
      • rowIndex = selectedRowInComponent:1
      • provinceItem.cities[rowIndex]
    • 拼接
    • stingWithFormat:%@-%@
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吃衅,一起剝皮案震驚了整個濱河市往踢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徘层,老刑警劉巖峻呕,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趣效,居然都是意外死亡瘦癌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門跷敬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讯私,“玉大人,你說我怎么就攤上這事西傀〗锟埽” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵池凄,是天一觀的道長抡驼。 經(jīng)常有香客問我,道長肿仑,這世上最難降的妖魔是什么致盟? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任碎税,我火速辦了婚禮,結(jié)果婚禮上馏锡,老公的妹妹穿的比我還像新娘雷蹂。我一直安慰自己,他們只是感情好杯道,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布匪煌。 她就那樣靜靜地躺著,像睡著了一般党巾。 火紅的嫁衣襯著肌膚如雪萎庭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天齿拂,我揣著相機(jī)與錄音驳规,去河邊找鬼。 笑死署海,一個胖子當(dāng)著我的面吹牛吗购,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砸狞,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼捻勉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刀森?” 一聲冷哼從身側(cè)響起踱启,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎研底,沒想到半個月后禽捆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡飘哨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琐凭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芽隆。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖统屈,靈堂內(nèi)的尸體忽然破棺而出胚吁,到底是詐尸還是另有隱情,我是刑警寧澤愁憔,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布腕扶,位于F島的核電站,受9級特大地震影響吨掌,放射性物質(zhì)發(fā)生泄漏半抱。R本人自食惡果不足惜脓恕,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窿侈。 院中可真熱鬧炼幔,春花似錦、人聲如沸史简。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圆兵。三九已至跺讯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間殉农,已是汗流浹背刀脏。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留统抬,地道東北人火本。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像聪建,于是被迫代替她去往敵國和親钙畔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容