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都得到不交互。


你可能感兴趣的:(UIPopoverController的使用心得)