分两种情况, 从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];