?很多時候都會有寫一個dropDownView的功能需要,學習封裝一個自己的dropDownView將顯得非常之有必要.
在導航欄的titleView上添加一個button,然后通過點擊這個titleButton來實現彈出dropDownView的效果.
于是乎我們就需要定義這樣的一個buttonClick的方法
創建一個這樣的控件,然后設定controller中的view大小,最后通過show的形式展示出來
創建這樣一個自定義的View出來~
??? 我們為什么需要一個controller屬性?因為其實我們創建的dropDownView中往往放的是類似tableView之類的控件,用一個單獨的controller來管理它自然是極好的
在我們的dropDownView中,有這樣一個容器,用來放我們將要添加的controller的view
???這個懶加載為何這么寫?因為我們的containerView是一個weak的UI控件
通過重寫set方法,將外界傳入的controller的View添加到我們的容器之中
一來可以在容器中顯示我們的內容,而來容器內的內容又可以達到單獨的controller的控制,符合MVC設計原則
最后我們只要將這個dropDownView展示出來就好了:
這里有一個坐標系的轉換
由于有父控件的存在,我們的容器containerView的frame往往是根據自己所在的view的frame來計算的,但這并不利于我們在整個手機界面上對彈出菜單位置的布局.
我們需要將點擊button的那個View的frame轉換到window上,這樣利于我們的定位,才有了這句
/**坐標系轉換*/
CGRect newFrame = [from convertRect: from.bounds toView:window];
轉換完成之后再去布局具體的containerView的位置就簡單多了~