iPad特有的方法,iPhone无法使用
创建一个UIViewController,这个UIViewController就是这个方框,需要具体在UIViewController里面怎么布局就看自己的安排了,上面的那个角是系统生成的,具体怎么生成的,下面讲。
首先我们要明确,肯定是点了发起讨论才使UIPopoverController出现的,所以,创建就写在按钮的触发方法里面。
这些是需要的界面
@property ( nonatomic , strong ) RightViewFactory *rightView;
@property ( nonatomic , strong ) UIViewController *popVC;
@property ( nonatomic , strong ) UIPopoverController *popC;
首先肯定要判断这个视图控制器有没有,有的话就不要再多次创建了,而 UIPopoverController 可以多次创建是因为每次使用完后会自动销毁(貌似是这样的)
if (! _popVC ) {
_popVC = [[ UIViewController alloc ] init ];
_popVC . view . frame = CGRectMake ( 0 , 0 , POPOVER_WIDTH , POPOVER_HEIGHT );
_popVC . view . backgroundColor = [ UIColor whiteColor ];
// 构建 popVC 的视图
[ self createPopVC ];
}
创建 UIPopoverController
// 构建 POPover
self . popC = [[ UIPopoverController alloc ] initWithContentViewController : _popVC ];
这个是设置 UIPopoverController的尺寸,跟着你的视图控制器写就行了
_popC . popoverContentSize = _popVC . view . frame . size ;
重点来了,首先,sender是点击事件的按钮,_rightView是导航栏右导航项,也就是按钮在_rightView上面, permittedArrowDirections 是设置那个角的朝向,ang顾名思义就是任何方向了
[ _popC presentPopoverFromRect :sender. frame inView : _rightView permittedArrowDirections : UIPopoverArrowDirectionAny animated : YES ];
效果图
具体使用方法(下有demo):
创建一个UIViewController,这个UIViewController就是这个方框,需要具体在UIViewController里面怎么布局就看自己的安排了,上面的那个角是系统生成的,具体怎么生成的,下面讲。
首先我们要明确,肯定是点了发起讨论才使UIPopoverController出现的,所以,创建就写在按钮的触发方法里面。
这些是需要的界面
@property ( nonatomic , strong ) RightViewFactory *rightView;
@property ( nonatomic , strong ) UIViewController *popVC;
@property ( nonatomic , strong ) UIPopoverController *popC;
首先肯定要判断这个视图控制器有没有,有的话就不要再多次创建了,而 UIPopoverController 可以多次创建是因为每次使用完后会自动销毁(貌似是这样的)
if (! _popVC ) {
_popVC = [[ UIViewController alloc ] init ];
_popVC . view . frame = CGRectMake ( 0 , 0 , POPOVER_WIDTH , POPOVER_HEIGHT );
_popVC . view . backgroundColor = [ UIColor whiteColor ];
// 构建 popVC 的视图
[ self createPopVC ];
}
创建 UIPopoverController
// 构建 POPover
self . popC = [[ UIPopoverController alloc ] initWithContentViewController : _popVC ];
这个是设置 UIPopoverController的尺寸,跟着你的视图控制器写就行了
_popC . popoverContentSize = _popVC . view . frame . size ;
重点来了,首先,sender是点击事件的按钮,_rightView是导航栏右导航项,也就是按钮在_rightView上面, permittedArrowDirections 是设置那个角的朝向,ang顾名思义就是任何方向了
[ _popC presentPopoverFromRect :sender. frame inView : _rightView permittedArrowDirections : UIPopoverArrowDirectionAny animated : YES ];
如果说在你的UIPopoverController中有push事件,需要在你push方法后跟着写一个
[_popCdismissPopoverAnimated:YES];
此方法是关闭UIPopoverController,否则push到下个界面你的UIPopoverController还存在在那里
以上示例,仅仅是简单使用,仅此参考,如诺有更多需求
我的具体demo:
这是点击事件,自己自定义一个button好了
demo里先判断视图控制器是否存在,因为viewController不会自动销毁,而且,ViewController的尺寸大小可以当做你的PopoverController的尺寸,你也可以使用PopoverController.popoverContentSize 设置PopoverController大小
sender.frame是button的frame
_rightView是我盛放button的界面(在我的demo里面相当于
self.navigationItem.rightBarButtonItem = [[UIBarButtonItemalloc] initWithCustomView:_rightView];
)//设置发起讨论下的视图
- (void)createImgView:(UIButton *)sender
{
//判断视图控制器是否已经存在
if (!_popVC) {
_popVC = [[UIViewController alloc]init];
_popVC.view.frame = CGRectMake(0, 0, POPOVER_WIDTH, POPOVER_HEIGHT);
_popVC.view.backgroundColor = [UIColor whiteColor];
//构建popVC的视图
[self createPopVC];
}
//构建Popover
self.popC = [[UIPopoverController alloc]initWithContentViewController:_popVC];
_popC.popoverContentSize = _popVC.view.frame.size;
[_popC presentPopoverFromRect:sender.frame inView:_rightView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
//构建popVC的视图
- (void)createPopVC
{<span style="white-space:pre"> </span> //这里面是对ViewController的布局,相当于是对<span style="font-family: Arial, Helvetica, sans-serif;">PopoverController的布局,当然,你也可以子类化一个ViewController</span><span style="white-space:pre"> </span> }