• 分析界面构成(左右各一块,左边显示菜单项,右侧负责显示内容项)
  • 分别针对于左右视图进行布局,做好横竖屏的适配后,再想左右视图内部如何搭建,从大到小
  • 像一些固定的数值(比如横竖屏状态下的菜单栏高度等),放到单独的一个文件中进行管理,方便维护
  • 完善左侧菜单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的内容控制器
  • 封装数据获取工具类
  •