弹出框UIPopoverPresentationControll

2016-10-07  本文已影响838人  NateLam

绘制小尖角so easy

弹出的相关代码, 当然了, 写在点击事件实现方法里

  1. homeVc就是负责模态的父Vc,
  2. 懒加载一个容器Vc, 代码里叫self.contentVc, 把弹出框里面视图内容写在容器Vc中,
  3. _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;
//}
上一篇 下一篇

猜你喜欢

热点阅读