UIPopoverController 是iPad特有控件,(iOS7-9),在iOS9之后別廢棄
使用步驟
- 設置內容控制器
- UIPopoverController直接繼承NSObject,不具備可視化能力。所以一定要指定一個繼承自UIViewController的“內容控制器”來提供內容
- 設置內容的尺寸
- 在屏幕上顯示的大小
- 從那個地方顯示出來
code
- 新建一個VC類 MenuViewController 作為 UIPopoverController 的內容控制器,
- 在HomeVC增加一個屬性@property (nonatomic, strong) UIPopoverController *popOver;
- (void)popPopView { // 設置內容控制器 MenuViewController *menuVC = [[MenuViewController alloc] init]; self.popOver = [[UIPopoverController alloc] initWithContentViewController:menuVC]; // 設置內容的尺寸 如果內容控制器里設置了 preferredContentSize 大小 self.preferredContentSize = CGSizeMake(200, 200); 那么 self.popOver.popoverContentSize 將無意義,而且在實際開發中也應該由內容控制器控制大小 self.popOver.popoverContentSize = CGSizeMake(300, 400); // 從那個地方顯示出來 第一個參數是popOver出現的位置,第二個參數是箭頭方向 [self.popOver presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; // 這個方法是自定義出現的位置 Rect:箭頭指向的區域范圍,以View的左上角為坐標原點 // [self.popOver presentPopoverFromRect:CGRectMake(GetWindowWidth * 0.5, 200, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; }
注意:如果內容控制器里設置了 preferredContentSize 大小 self.preferredContentSize = CGSizeMake(200, 200); 那么 self.popOver.popoverContentSize 將無意義,而且在實際開發中也應該由內容控制器控制大小
menuVC
- - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
self.preferredContentSize = CGSizeMake(200, 200);
}

- 設置代理
- // 設置代理
self.popOver.delegate = self; - #pragma mark-代理方法
// popoverController消失的時候調用
-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
}
// popoverController的位置改變的時候調用(如豎屏變橫屏)
-(void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view {
}
// 用來決定用戶點擊了蒙版后,popoverController是否可以dismiss,返回YES代表可以,返回NO代表不可以
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController {
return NO;
}
- // 設置代理
- 蒙版注意點
- // 默認情況下 只要UIPopoverController顯示在屏幕上,UIPopoverController背后的所有控件默認是不能跟用戶進行正常交互的,點擊UIPopoverController區域外的控件,UIPopoverController默認會消失
// 要想點擊UIPopoverController區域外的控件時不讓UIPopoverController消失,解決辦法是設置passthroughViews屬性
// 設置那些控件可以通過交互 - self.popOver.passthroughViews = @[self.test11]; // 可以看到test11按鈕可以交互

