分析界面构成(左右各一块,左边显示菜单项,右侧负责显示内容项)
分别针对于左右视图进行布局,做好横竖屏的适配后,再想左右视图内部如何搭建,从大到小
像一些固定的数值(比如横竖屏状态下的菜单栏高度等),放到单独的一个文件中进行管理,方便维护
完善左侧菜单view(Dock)
分析界面构成,大致分成三块
上方的头像
中间的菜单
下面的菜单
先做好三大块视图的横竖屏尺寸适配,然后在具体考虑内部搭建,从大到小
通过观察视图样式, 建议从下往上进行布局
完善底部菜单的界面实现
需要适配横竖屏的显示样式,可以在layoutSubviews方法中,判断横竖屏,进行布局
完善中间的菜单
需要适配横竖屏的显示样式,可以在layoutSubviews方法中,判断横竖屏,进行布局
观察内部按钮样式,需要自定义按钮,调整图片和文字显示位置
完善顶部的头像
需要适配横竖屏的显示样式,可自定义按钮
是iPad开发中常见的一种控制器
跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面
2.UIPopoverController使用步骤
设置内容控制器
由于UIPopoverController直接继承自NSObject,不具备可视化能力
因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个控制器称为"内容控制器"
设置内容的尺寸
显示出来占据多少屏幕空间
设置显示的位置
从哪个地方显示出来
3.UIPopoverController代码实现
设置内容控制器
在初始化UIPopoverController的时候传入一个内容控制器
(id)initWithContentViewController:(UIViewController *)viewController
围绕着一个UIBarButtonItem显示(箭头指定那个UIBarButtonItem)
// 围绕着一个UIBarButtonItem显示(箭头指定那个UIBarButtonItem)
// item:围绕着哪个UIBarButtonItem显示
// arrowDirections:箭头的方向
// animated:是否通过动画显示出来
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
animated:(BOOL)animated;
围绕着某一块特定区域显示(箭头指定那块特定区域)
// 围绕着某一块特定区域显示(箭头指定那块特定区域)
// rect:指定箭头所指区域的矩形框范围(位置和尺寸)
// view:rect参数是以view的左上角为坐标原点(0,0)
// arrowDirection:箭头的方向
// animated:是否通过动画显示出来
- (void)presentPopoverFromRect:(CGRect)rect
inView:(UIView *)view
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
animated:(BOOL)animated;
关闭UIPopoverController
(void)dismissPopoverAnimated:(BOOL)animated;
只要UIPopoverController显示在屏幕上,UIPopoverController背后的所有控件默认是不能跟用户进行正常交互的
点击UIPopoverController区域外的控件,UIPopoverController默认会消失
解决办法是设置passthroughViews属性
@property (nonatomic, copy) NSArray *passthroughViews;
这个属性是设置当UIPopoverController显示出来时,哪些控件可以继续跟用户进行正常交互
这样的话,点击区域外的控件就不会让UIPopoverController消失了
[UIPopoverController dealloc] reached while popover is still visible.
翻译:popover在仍旧可见的时候被销毁了(调用了dealloc)
从错误可以得出结论
当popover仍旧可见的时候,不准销毁popover对象
在销毁popover对象之前,一定要让popover消失(不可见)
要想在iPhone中实现popover效果,必须要自定义view,可以参考
http://code4app.com/ios/Popover-View-in-iPhone/4fa931bd06f6e78d0f000000
http://code4app.com/ios/Popup-Menu/512231ac6803fa9e08000000
五.iPad(UIPopoverController使用)案例(美团网)开发步骤
1.搭建项目结构
划分项目功能模块,创建文件夹结构
项目只有一个功能模块
设置导航栏菜单展示,当点击某个菜单时,展示对应的数据
文件夹结构创建
拖入必要的资源文件和工具类,以及第三方框架(可以使用时再拖入)
启动图片,程序图标
拖入界面搭建必备资源文件
一些第三方框架可以等使用时再拖入
搭建Storyboard,跳转结构
入口控制器为导航控制器,其根控制器是一个简单的视图控制器
2.首页功能实现
实现导航栏菜单展示
自定义菜单视图
通过xib文件描述视图界面
提供菜单数据模型,供外界赋值
创建导航栏上3个菜单视图,以及logo图标
做好横竖屏适配
实现菜单点击事件的监听
封装两级菜单控制器
使用xib描述两级菜单
提供两级菜单数据模型,供外界赋值
实现点击菜单时的业务逻辑
在对应的菜单下面,弹出UIPopoverController
设置popoverController的内容控制器
封装数据获取工具类