UIPopoverController的使用心得

分两种情况, 从BarButtonItem点击, 或者是在view当中有某一个按钮或者区域点击弹出

1。 如果是从BarButtonItem点击弹出, 如在NavigationBar上的点击, 代码如下:

        self.popVC = [[[UIPopoverController alloc] initWithContentViewController:amc] autorelease];

        popVC.popoverContentSize = amc.view.frame.size;

        // 下面这种方式生成的界面接近于模态,即使当前popVC正在展示,但NavigationBar上的按钮仍然能与用户进行交互,

        // 所以容易出错。所以在点击前需要判断是否正在展示,并做对应的处理

        [popVC presentPopoverFromBarButtonItem:((UIBarButtonItem *)sender)

                      permittedArrowDirections:UIPopoverArrowDirectionUp 

                                      animated:YES];


这种方式弹出的popVC接近于模态, 但不完全是模态, 因为NavigationBar上的所有按钮都高于这个popVC层, 也就是说NavigationBar上的按钮可以继续响应用户的操作,而不管当前是否有从BarButtonItem弹出的popVC。

这样就有可能引发一些问题, 如, 我们再次点击这个BarButtonItem时, 则又会执行一次弹出操作, 实际上界面上将会有两个popOver, 更明显的问题是, 如果我们点navigationBar上的返回按钮,把当前这个界面pop出去, 则会因为当前还有展示的popVC而使当前界面崩溃。


2。 从界面上的某个按钮或者某片区域弹出popOver,排除navigationBar或者TabBar上的点击, 问题同上。

代码如下:

// 设定展示区域的大小

        popVC.popoverContentSize = levePC.view.frame.size;

// 从这个按钮点击的位置弹出,并且popVC的指向为这个按钮的中心。 曾有段时间纠结于这个popVC的指向, 真是麻烦得很

        [popVC presentPopoverFromRect:btn.bounds

                               inView:btn

             permittedArrowDirections:UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionRight 

                             animated:YES]; 


这种方式弹出的popVC就是绝对的模态了, 不把这个popVC消隐, 其它任何地方, 包括NavigtionBar都得到不交互。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值