之前我一直是用自定义的view和动画配合来做popView,直到我看到了一个叫<strong>UIPopoverPresentationController</strong>的东西
我的做法是先写一个自己的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;
}
代理是<strong>UIPopoverPresentationControllerDelegate</strong>
然后还要写一个方法,如果不写这个方法就会导致点击完出现黑屏
- (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"];
网友评论