學(xué)習(xí)HM微博項目第2天

步驟:導(dǎo)航欄主題 -> 添加搜索框 -> 易混淆的屬性 -> 自定義搜索框 -> 標(biāo)題按鈕 -> 彈出下拉菜單 -> 封裝下拉菜單

導(dǎo)航欄主題

在HMNavigationController類中,修改initialize方法,設(shè)置NavigationBar和UIBarButtonItem的主題,如下:

initialize方法.png

設(shè)置NavigationBar的主題,如下:

設(shè)置NavigationBar的主題.png

設(shè)置UIBarButtonItem的主題,如下:
的主題,如下:

設(shè)置UIBarButtonItem的主題.png

添加搜索框

在HMDiscoverViewController類的viewDidLoad方法中,添加搜索框,由于系統(tǒng)的UISearchBar不能滿足要求,所以通過UITextField控件來創(chuàng)建搜索框,如下:

添加搜索框.png

APP的界面:

APP的界面.png

易混淆的屬性

具體可看iOS總結(jié)的內(nèi)容屬性總結(jié)(MJ總結(jié))和item屬性總結(jié)(MJ總結(jié))。

自定義搜索框

搜索框在很多項目中都可能使用到,所以要對其進(jìn)行封裝。通過創(chuàng)建一個繼承UITextField類的HMSearchBar對搜索框進(jìn)行封裝,不同于之前的Category。

首先,在HMDiscoverViewController類的viewDidLoad方法中,設(shè)置自定義的搜索框,如下:

自定義的搜索框.png

在HMSearchBar類中,封裝搜索框的詳細(xì)設(shè)置,并把方法searchBar提供給外界使用,如下:

HMSearchBar類.png

在initWithFrame方法中,自定義搜索框的細(xì)節(jié),如下:

自定義搜索框的細(xì)節(jié).png

標(biāo)題按鈕

在HMHomeViewController類的viewDidLoad方法中,設(shè)置導(dǎo)航欄中間的標(biāo)題按鈕,如下:

設(shè)置導(dǎo)航欄中間的標(biāo)題按鈕.png

標(biāo)題按鈕的點擊事件如下:

標(biāo)題按鈕的點擊事件.png

對于標(biāo)題按鈕的frame布局和細(xì)節(jié)都封裝在繼承UIButton的HMTitleButton類中,如下:

HMTitleButton類的frame布局和細(xì)節(jié).png

其中,在initWithFrame方法中,封裝標(biāo)題按鈕的細(xì)節(jié),如下:

標(biāo)題按鈕的細(xì)節(jié).png

而frame的布局具體如下:

frame的布局.png

APP的界面:

APP的界面.png

彈出下拉菜單

在標(biāo)題按鈕的點擊事件titleClick中,彈出一個簡易的菜單,這個菜單不能收起,如下:

屏幕快照 2015-09-03 下午9.25.18.png

APP的界面:

APP的界面.png

封裝下拉菜單

下拉菜單在很多項目中都可能使用到,所以要對其進(jìn)行封裝。通過創(chuàng)建一個繼承UIView類的HMDropdownMenu對下拉菜單進(jìn)行封裝。

在標(biāo)題按鈕的點擊事件titleClick中,創(chuàng)建下拉菜單并設(shè)置內(nèi)容,如下:

創(chuàng)建下拉菜單.png

在HMDropdownMenu的實現(xiàn)類中,封裝下拉菜單的細(xì)節(jié),其所用到的屬性和方法如下:

HMDropdownMenu的實現(xiàn)類中的屬性和方法.png

其中,屬性有:

containerView屬性.png

方法具體是:
方法menu用于創(chuàng)建下拉菜單并對其進(jìn)行初始化,如下:

創(chuàng)建下拉菜單.png

方法setContent與setContentController用于設(shè)置內(nèi)容和內(nèi)容控制器的細(xì)節(jié),如下:

設(shè)置內(nèi)容和內(nèi)容控制器.png

方法containerView是懶加載方法,創(chuàng)建用來顯示具體內(nèi)容的容器,如下:

創(chuàng)建用來顯示具體內(nèi)容的容器.png

方法showFrom:與dismiss用于顯示和銷毀下拉菜單,另外,點擊下拉菜單的外面可以銷毀下拉菜單,這時會觸發(fā)方法touchesBegan:withEvent響應(yīng)dismiss方法,如下:

顯示下拉菜單.png
銷毀下拉菜單.png

在HMDropdownMenu的聲明類中,將某些屬性和方法提供給外界創(chuàng)建下拉菜單使用,如下:

提供給外界的屬性和方法.png

這些屬性和方法具體有:

屬性和方法.png

在顯示和銷毀下拉菜單的同時需要改變標(biāo)題按鈕的箭頭,這時候采用代理模式。
前三步:
1.在HMDropdownMenu的聲明類中聲明代理協(xié)議
2.設(shè)置代理對象屬性
如下:

聲明代理協(xié)議.png

3.在實現(xiàn)類通知代理對象--下拉菜單的變化
通知代理對象的具體可見上面的方法showFrom:與dismiss。

后三步:
1.設(shè)置代理,可見titleClick:方法
2.遵守代理協(xié)議
如下:

遵守代理協(xié)議.png

3.實現(xiàn)代理方法
如下:

代理方法.png

APP的界面:

APP的界面.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,200評論 4 61
  • transform-origin: 50% 50% 0 /這是默認(rèn)值,中心點為起點transform-origin...
    6659a0f02826閱讀 29,539評論 0 1
  • ·一· 素子又喝醉了,她倒在湖水里,白色的裙子漸漸變得透明。 我靜靜地看著她,手里...
    杜森姑娘閱讀 316評論 0 0
  • 區(qū)別:setTimeout 可以使一段代碼在指定時間后運行;而 setInterval 則可以使一段代碼每過指定時...
    埃米莉Emily閱讀 251評論 0 0