UI篇-自定義控件中關(guān)于父試圖中的鍵盤遮擋問題

我們平時在設(shè)計頁面的時候,考慮到MVC的設(shè)計模式會出現(xiàn)很多層的試圖分離,這里面就不可以避免的出現(xiàn)自定的控件。
我在一次自定義控件中出現(xiàn)了以下問題,記錄在案以供大家注意和參考。


(1)UIScrollView 對于加載在它上層試圖中的手勢無影響,但對上上層時圖的手勢就會失去響應(yīng)。具體原因考慮到是 UIResponder 的事件傳遞中出現(xiàn)了事件劫持。

(2)當(dāng)我們自定義控件時,如果控件中包括了UITextFeild 就要考慮到在用到這個自定義的控件的試圖的鍵盤遮擋輸入框的情況,一般自定義試圖都繼承于 BaseView,在這里有鍵盤遮擋統(tǒng)一的處理方法,但是要求子試圖的 大小要跟屏幕一樣大才行,一般自定義控件可能是很小的,所以這個自定義控件就不能繼承 BaseView,它的上層View可以繼承于 BaseView ,使用代理,當(dāng)自定義控件中的UITextFeild 被編輯時通知上層試圖,調(diào)用上層試圖處理鍵盤遮罩的方法,動態(tài)的改變上層試圖的位置即可。

(3)給自定義控件初始化的時候可以使用Frame,也可以使用Layout

使用Frame:x,y 坐標初始化為0,大小確定即可,使用Layout 來布局位置。如下,注意Layout布局里的大小要和 Frame里面的大小一樣。自定義控件里面子視圖的初始化寫在 initWithFrame中
LMRecordVoiceView *recordView = [[LMRecordVoiceView alloc]initWithFrame:RECT(0, 0, 320, 60,1)]; [self.view addSubview:recordView]; recordView.sd_layout.leftSpaceToView(self.view,Scale_X(0)).topSpaceToView(self.view,Scale_Y(0)).rightSpaceToView(self.view,Scale_X(0)).heightIs(Scale_X(60));
使用SDAutoLayout:自定義控件的子視圖初始化寫在自定義的方法中如:initSubView,待自定義控件使用SDAutoLayout設(shè)置好后,再調(diào)用這個自定義控件中的自定義方法來初始化里面的子視圖即可。
AutolayoutView *view1 = [AutolayoutView new]; view1.tag = 100; view1.backgroundColor = [UIColor blueColor]; [self.view addSubview:view1]; view1.sd_layout.leftSpaceToView(self.view,20).topSpaceToView(self.view,80).widthIs(200).heightIs(80); [view1 initSubView];
++++++++++++++++
AutolayoutView *view2 = [AutolayoutView new]; view2.tag = 200; view2.backgroundColor = [UIColor greenColor]; [self.view addSubview:view2]; view2.sd_layout.leftSpaceToView(self.view,20).topSpaceToView(self.view,200).widthIs(100).heightIs(140); [view2 initSubView];

(4)A加載到B上時,A調(diào)用B中的方法(A讓B為期做事)需要代理或者回調(diào),B調(diào)用A的方法(B讓A為其做事),就直接用A的一個實例話對象調(diào)用A中的方法即可。

心得:

一個復(fù)雜系統(tǒng)的編寫,不是一觸而就的,也行在最初的全局設(shè)計的時候就需要發(fā)費很多的時間,但是這個時間是值得的,總比做到一半發(fā)現(xiàn)使用的方式是很low的,或者是走不通的要好。在沒有思路的時候,可以先把最有把握的設(shè)計先完成,這樣會漸漸的產(chǎn)生新的思路,一步一步走下去就回有好的設(shè)計方案產(chǎn)生,剛開始就想寫出完美的設(shè)計或者完善的設(shè)計是不現(xiàn)實的,反而會增加思維壓力,人為加大了開發(fā)的難度。

一個巧妙的設(shè)計如果不寫注釋就回讓后續(xù)接手的人痛苦不堪,因為外人根本不知道自己所謂的“巧妙邏輯”,如:為了在眾多情況中,使用一種公共的方法,就會把 for循環(huán)的中的 i 和數(shù)組中的 下標 i 聯(lián)系在一起,借力打力,進而寫出看似很簡單的代碼,實則是大大降低了代碼的可讀性?!扒擅睢本蛶砹诉壿嫷膹?fù)雜,魚和熊掌難以兼得。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容