ios9 下使用oc 实现iPad和iPhone的pop显示

作者: mmaoyudi | 来源:发表于2015-12-12 01:22 被阅读2623次

ios9刚出才不久,很多IT行业的大牛和新人都开始慢慢的尝试打算开始习惯去使用ios9的新特性
而pop也是苹果升级之后稍作改变的一点,在ios9开始以前ipad开始常用的UIPopoverController已经开始被苹果抛弃
而ios8开始出现UIPopoverPresentationController即将代替UIPopoverPresentationController,不过iphone6s和iphone6sp的到来,UIPopoverPresentationController能让pop显示做到最大的发挥,UIPopoverController只能在iPad上做pop显示,一旦使用到iPhone上就会报错,而UIPopoverPresentationController不仅仅不会抱错,更能在iPhone下做pop显示,这样很多开发人员不需要为了了iPad和iPhone的UI而做两套控件

下面我就介绍下关于UIPopoverPresentationController在iPhone上做pop显示的方法介绍

#import "myviewcontroller.h"
//在iPhone上显示需要遵守<UIPopoverPresentationControllerDelegate>协议
@interface myviewcontroller ()<UIPopoverPresentationControllerDelegate>

@end


-(void)viewDidLoad {

[super viewDidLoad];
//首先先创建一个背景色为绿色的button,想做到的效果是点击button右边出现一个pop的控制器大小为宽高200
UIButton*green=[[UIButton alloc]initWithFrame:CGRectMake(100,100, 100, 100)];


//设置背景色
green.backgroundColor=[UIColor greenColor];

//添加事件
[green addTarget:self action:@selector(button:)forControlEvents:UIControlEventTouchUpInside];

//将控件添加到main控制器的view上面
[self.view addSubview:green];

}



-(void)button:(UIButton*)green
{

//创建一个弹出的controller背景色为橙色
UIViewController*orange=[[UIViewController alloc]init];

//设置orange的莫泰弹出模式为pop
orange.modalPresentationStyle=UIModalPresentationPopover;

//设置orage的背景色为橙色
orange.view.backgroundColor=[UIColor orangeColor];

//设置orange的大小为长宽200
orange.preferredContentSize=CGSizeMake(200, 200);

//设置控制器pop的箭头在左边,这样控制器就在右边了
orange.popoverPresentationController.permittedArrowDirections=  UIPopoverArrowDirectionLeft;

//设置pop基于控件的位置,因为如果箭头在上面那么默认位置就是控件下边的中线,所以这里用bounds就好
orange.popoverPresentationController.sourceRect=green.bounds;

//设置箭头在控制器的左边
orange.popoverPresentationController.permittedArrowDirections= UIPopoverArrowDirectionLeft;

//设置orange的位置是基于green的button的
    orange.popoverPresentationController.sourceView=green;

//注意:实现以上方法后orange就可以在ipad上正常显示了,但是在iphone上还是一个全屏的莫泰
//这里需要用到UIPopoverPresentationController的代理方法 首先设置代理
//这里要注意一下之前把代理在后面设置也可以现在的版本貌似要在添加进去之前设置

    orange.popoverPresentationController.delegate=self;
//将控制器以莫泰的方式出现
[self presentViewController:orange animated:YES completion:nil];




//以上代码也可以从控制器中取出UIPopoverPresentationController然后再设置UIPopoverPresentationController的属性,结果都是一样的
//        UIPopoverPresentationController*pop=orange.popoverPresentationController;
//    pop.permittedArrowDirections=  UIPopoverArrowDirectionLeft;
//    pop.sourceRect=CGRectMake(100,0, 100,100);
//    pop.permittedArrowDirections=  UIPopoverArrowDirectionLeft;
//    pop.sourceView=self.view;
}

//实现代理方法
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController*)controller{
//返回UIModalPresentationNone为不匹配
return UIModalPresentationNone;}

这样在iPhone上也可以以pop的显示方式显示控制器了.喜欢的话记得dian ge zan

相关文章

网友评论

  • CharType:测试 需要先设置 UIModalPresentationPopover 在设置delegate 才能在iPhone上 pop出那种效果
  • 编号x71291:请问 怎么设置弹出来四周围的那个遮挡层的颜色 我想把它改成 clearColor 但是不知道怎么改啊 怎么办😥 那个遮挡层的颜色是灰色的
    mmaoyudi:@CatLoveDog 上面那个方法在plus上好像会出问题。
  • d920e665d3d1:你好问下 UIPopoverPresentationController*pop=vv.popoverPresentationController; 中的 vv是哪里来的 啊
  • GG266:我是在横屏下使用的 上面的那种方法。模拟器上面 OK的。可是到真机测试就不行了~~求问!
  • 焦国辉33:请问如何设置背景色啊,按照你的代码只能实现view的背景色,那个箭头的颜色不适配,怎么办
    没打伞的鱼:@mmaoyudi .popoverPresentationController.backgroundColor 确实有效果,可以设定整体popover菜单的颜色
    焦国辉33:@mmaoyudi 完美解决问题,谢谢
    mmaoyudi:@焦国辉33 试试.popoverPresentationController.backgroundColor
  • 繁华三千_泰然独处:楼主,写了代理还是会被全屏的莫泰嘢
    mmaoyudi:@风吹裤裆凉飕飕啊 加我qq晚点帮你看看。 365908090
  • 丸蛋蟹:谢谢楼主 :+1:
    mmaoyudi:客气。到时候有问题可以直接留言。我再更新。相互学习嘛
  • 马爷:楼主想问你点关于这个对象的事情 就是点击一下出来 再点击一下消失 走的是什么方法知道吗?
    mmaoyudi:@马爷 animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? 代理方法里的。我用swift写的这个
    马爷:额。我知道,但是你能帮我看一下消失的方法吗。走的是哪一个?
    mmaoyudi:那你就要自定义动画了。我记得我发了一篇。就是自定义泡泡效果。进去。出来。的方法都有。不过效果都要自己计算
  • 马爷:楼主你的这写代码是怎么来的
    mmaoyudi:@马爷 可以啊 只不过必须在控制器里调用.这个方法是莫泰弹出控制器
    马爷:@mmaoyudi 我的意思你吧那些需要的参数写全一点 对于初次使用的人真的很重要 比如说
    [self presentViewController:vv animated:YES completion:nil];
    还有你这些代码好像实现不了是吧 你怎么看呢 还是说赋值的多了
    mmaoyudi:@马爷 手敲的啊
  • zBk9cN:iOS8以下,只能是老办法了?iPad和iPhone使用不同的控件?
    mmaoyudi:@唐僧之妈 是的。ios8之前手机好像没发吧。我没试过
  • 爃少:iOS 8.0 就可以用通配 iPhone 和iPad了

本文标题:ios9 下使用oc 实现iPad和iPhone的pop显示

本文链接:https://www.haomeiwen.com/subject/mabyhttx.html