UI篇-自定义控件中关于父试图中的键盘遮挡问题

我们平时在设计页面的时候,考虑到MVC的设计模式会出现很多层的试图分离,这里面就不可以避免的出现自定的控件。 我在一次自定义控件中出现了以下问题,记录在案以供大家注意和参考。


(1)UIScrollView 对于加载在它上层试图中的手势无影响,但对上上层时图的手势就会失去响应。具体原因考虑到是 UIResponder 的事件传递中出现了事件劫持。

(2)当我们自定义控件时,如果控件中包括了UITextFeild 就要考虑到在用到这个自定义的控件的试图的键盘遮挡输入框的情况,一般自定义试图都继承于 BaseView,在这里有键盘遮挡统一的处理方法,但是要求子试图的 大小要跟屏幕一样大才行,一般自定义控件可能是很小的,所以这个自定义控件就不能继承 BaseView,它的上层View可以继承于 BaseView ,使用代理,当自定义控件中的UITextFeild 被编辑时通知上层试图,调用上层试图处理键盘遮罩的方法,动态的改变上层试图的位置即可。

(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设置好后,再调用这个自定义控件中的自定义方法来初始化里面的子视图即可。 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调用B中的方法(A让B为期做事)需要代理或者回调,B调用A的方法(B让A为其做事),就直接用A的一个实例话对象调用A中的方法即可。

心得:

一个复杂系统的编写,不是一触而就的,也行在最初的全局设计的时候就需要发费很多的时间,但是这个时间是值得的,总比做到一半发现使用的方式是很low的,或者是走不通的要好。在没有思路的时候,可以先把最有把握的设计先完成,这样会渐渐的产生新的思路,一步一步走下去就回有好的设计方案产生,刚开始就想写出完美的设计或者完善的设计是不现实的,反而会增加思维压力,人为加大了开发的难度。

一个巧妙的设计如果不写注释就回让后续接手的人痛苦不堪,因为外人根本不知道自己所谓的“巧妙逻辑”,如:为了在众多情况中,使用一种公共的方法,就会把 for循环的中的 i 和数组中的 下标 i 联系在一起,借力打力,进而写出看似很简单的代码,实则是大大降低了代码的可读性。“巧妙”就带来了逻辑的复杂,鱼和熊掌难以兼得。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏进击的君君的前端之路

ReactJS简介

20440
来自专栏程序员的诗和远方

在React Native中优雅的使用iconfont

React Native大火大热,其中为了解决图标,易于修改,换颜色,高清等需求,iconfont的应用更是必不可少。 React Native中的ic...

61240
来自专栏更流畅、简洁的软件开发方式

从吉日嘎拉那里学到的……

多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个。基于jQuery,无限级联动,支持...

22560
来自专栏前端儿

CSS常见兼容性问题总结

浏览器的兼容性问题,通常是因为不同的浏览器对同一段代码有不同的解析,造成页面显示不统一的情况。

15630
来自专栏前端说吧

JS案例 - 基于vue的移动端长按手势

当时首先想到要做长按事件的时候,我想到的是vue内部的自定义指令,毕竟官网里边有这么一句描述:

22820
来自专栏Android群英传

onTouchEvent(二) 使用Scroller实现黏性滑动的ScrollView

9330
来自专栏编程

React 深度编程:受控组件与非受控组件

作者:司徒正美 https://segmentfault.com/a/1190000012458996 受控组件与非受控组件在官网与国内网上的资料都不多,有些人...

28170
来自专栏熊二哥

React快速入门

正好旁边前端的兄弟最近在学习React,为了更深入的了解前端的业态,也果断来学习一发,目标是有个基础的了解,需要时能快速上手就OK,说实话,个人并不是很喜欢它的...

23180
来自专栏程序猿

用 Python 向你比个心

之前写了一篇用 Python 画一个小猪佩奇和哆啦 A 梦,然后最近看到有人用 turtle 画了一个心,觉得挺有意思的,于是把代码复制到本地,再加了个播放音乐...

30750
来自专栏企鹅号快讯

使用多个Python库开发网页爬虫(一)

21CTO社区导读:在本篇文章里,我们将讨论使用Python进行网页抓取以及如何引用多个库,如Beautifusoup,Selenium库,以及JavaScri...

40860

扫码关注云+社区

领取腾讯云代金券