很多时候都会有写一个dropDownView的功能需要,学习封装一个自己的dropDownView将显得非常之有必要.
在导航栏的titleView上添加一个button,然后通过点击这个titleButton来实现弹出dropDownView的效果.
于是乎我们就需要定义这样的一个buttonClick的方法
??? 我们为什么需要一个controller属性?因为其实我们创建的dropDownView中往往放的是类似tableView之类的控件,用一个单独的controller来管理它自然是极好的
???这个懒加载为何这么写?因为我们的containerView是一个weak的UI控件
一来可以在容器中显示我们的内容,而来容器内的内容又可以达到单独的controller的控制,符合MVC设计原则
最后我们只要将这个dropDownView展示出来就好了:
由于有父控件的存在,我们的容器containerView的frame往往是根据自己所在的view的frame来计算的,但这并不利于我们在整个手机界面上对弹出菜单位置的布局.
我们需要将点击button的那个View的frame转换到window上,这样利于我们的定位,才有了这句
/**坐标系转换*/
CGRect newFrame = [from convertRect: from.bounds toView:window];
转换完成之后再去布局具体的containerView的位置就简单多了~