弹出框UIPopoverPresentationControll
2016-10-07 本文已影响838人
NateLam
绘制小尖角so easy
弹出的相关代码, 当然了, 写在点击事件实现方法里
- homeVc就是负责模态的父Vc,
- 懒加载一个容器Vc, 代码里叫self.contentVc, 把弹出框里面视图内容写在容器Vc中,
- _popOver是属性@property (nonatomic,strong) UIPopoverPresentationController *popOver; 不用开辟空间
4.代理签这个
@interface NADiscoveryCollectionViewCell ()<UIPopoverPresentationControllerDelegate>
对应的有四个代理方法, 也就是出现的各个时机, 我用了俩, 需要再自己点进去看
NADiscoveryViewController *homeVc = (NADiscoveryViewController *)self.nextResponder.nextResponder.nextResponder;
//规定vc大小
self.contentVc.preferredContentSize = CGSizeMake(SCREEN_WIDTH / 2, 75 * SCALE_HEIGHT);
self.contentVc.modalPresentationStyle = UIModalPresentationPopover;
_popOver.backgroundColor = [UIColor whiteColor];
_popOver = self.contentVc.popoverPresentationController;
_popOver.delegate = self;
//以下两行决定弹出框以哪个作为出发点
_popOver.sourceView = _leftTopView;
_popOver.sourceRect = _leftTopView.labelOfTitle.frame;
//如果是微信那种navigationItem的弹出框
//_popover.barButtonItem = sender;
//箭头方向
_popOver.permittedArrowDirections = UIPopoverArrowDirectionUp;
//容器vc里面是个tableView, 所以我要传值去显示
self.contentVc.mArrOfData = @[@"全部商家", @"附近商家"].mutableCopy;
//最后模态推出
[homeVc presentViewController:self.contentVc animated:YES completion:nil];
三个代理方法
#pragma mark 三个UIPopoverPresentationControllerDelegate
//默认返回的是覆盖整个屏幕,需设置成UIModalPresentationNone。
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
return UIModalPresentationNone;
}
//弹框消失时调用的方法
- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
if(_leftIsOpen){
_leftIsOpen = !_leftIsOpen;
[self closeLeft];
}
else if (_rightIsOpen){
_rightIsOpen = !_rightIsOpen;
[self closeRight];
}
}
//点击蒙版是否消失,默认为yes;
//- (BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
// return YES;
//}