iOS如何做一个popView

之前我一直是用自定义的view和动画配合来做popView,直到我看到了一个叫UIPopoverPresentationController的东西

我的做法是先写一个自己的ViewController

然后写一个初始化的方法,sourceView就是箭头指向的那个视图,sourceRect就是那个视图的rect,permittedArrowDirections则是箭头指向的方向

- (instancetype)initWithSourceView:(UIView*)sourceView contentSize:(CGSize)size{
self = [super init];
self.modalPresentationStyle = UIModalPresentationPopover;
self.preferredContentSize = size;
self.popoverPresentationController.sourceView = sourceView;
self.popoverPresentationController.sourceRect = sourceView.bounds;
self.tableViewSize = size;
self.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
self.popoverPresentationController.backgroundColor = [UIColor whiteColor];
self.popoverPresentationController.delegate = self;
return self;
}

代理是UIPopoverPresentationControllerDelegate

然后还要写一个方法,如果不写这个方法就会导致点击完出现黑屏

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
return UIModalPresentationNone;
}

点击模板消失

- (BOOL)popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController{
return true;
}

之所以要自己弄是因为能在popView上放东西,比如说一个tableView

self.tableView = [[UITableView alloc]init];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.frame = CGRectMake(0, 0, self.tableViewSize.width, self.tableViewSize.height);
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.view addSubview:_tableView];

补充一个问题,就是我修改如:

self.popoverPresentationController.backgroundColor = [UIColor greenColor];

是没有效果的,所以我用的是KVC的方法去修改

[self.popoverPresentationController setValue:[UIColor greenColor] forKey:@"backgroundColor"];

你可能感兴趣的:(iOS如何做一个popView)