日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OS开发UI篇—popoverController使用注意

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS开发UI篇—popoverController使用注意 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS開發UI篇—popoverController使用注意

一、設置尺寸

提示:不建議,像下面這樣吧popover的寬度和高度寫死。

1 //1.新建一個內容控制器2 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init];3 4 //2.新建一個popoverController,并設置其內容控制器5 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc];6 7 //3.設置尺寸8 self.popover.popoverContentSize=CGSizeMake(300, 200);9 10 //4.顯示 11 [self.popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

更好的設計是:popover的尺寸應該由內部控制器的內容所決定。

內容控制器可以自行設置自己在popover中顯示的尺寸,其中有兩種方法:

(1)在iOS 7之前 ?@property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;

(2)從iOS 7開始 ?@property (nonatomic) CGSize preferredContentSize;

  以上屬性都是UIViewController的

1 -(NSArray *)menus2 {3 if (_menus==nil) {4 _menus=@[@"列表1",@"列表2",@"列表3",@"列表4",@"列表4",@"列表4",@"列表4",@"列表4",@"列表4",@"列表4",@"列表1",@"列表2",@"列表1",@"列表2"];5 }6 return _menus;7 }8 - (void)viewDidLoad9 { 10 [super viewDidLoad]; 11 12 //設置控制器將來在popover中的尺寸 13 CGFloat maxH=MIN(480,self.menus.count*44); 14 //ios7以前的設置 15 // self.contentSizeForViewInPopover=CGSizeMake(150, maxH); 16 //ios7以后 17 self.preferredContentSize=CGSizeMake(150, maxH); 18 19 }

效果:

  

關于MIN(A,B)的說明,最終的大小取決于B,但是最大不能超過A,如果超過A那么值就等于A。

?

二、設置顯示的位置

1.設置顯示的位置有2種方法

(1)圍繞著一個UIBarButtonItem顯示(箭頭指定那個UIBarButtonItem)

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

item :圍繞著哪個UIBarButtonItem顯示

arrowDirections :箭頭的方向

animated :是否通過動畫顯示出來

?

(2)圍繞著某一塊特定區域顯示(箭頭指定那塊特定區域)

- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

rect :指定箭頭所指區域的矩形框范圍(位置和尺寸),以view的左上角為坐標原點

view :rect參數是以view的左上角為坐標原點(0,0)

arrowDirections :箭頭的方向

animated :是否通過動畫顯示出來

rect和view參數如下:

相關代碼:

1 //2 // YYViewController.m3 // 01-PopoverController簡單介紹4 //5 // Created by apple on 14-8-17.6 // Copyright (c) 2014年 yangyong. All rights reserved.7 //8 9 #import "YYViewController.h" 10 #import "YYMenuViewController.h" 11 12 @interface YYViewController ()<UIPopoverControllerDelegate> 13 @property(nonatomic,strong)UIPopoverController *popover; 14 - (IBAction)buttonClick:(UIButton *)sender; 15 @end 16 17 @implementation YYViewController 18 19 - (void)viewDidLoad 20 { 21 [super viewDidLoad]; 22 } 23 24 -(void)showPopoverFromItem 25 { 26 //1.新建一個內容控制器 27 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init]; 28 29 //2.新建一個popoverController,并設置其內容控制器 30 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc]; 31 32 //3.設置尺寸 33 // self.popover.popoverContentSize=CGSizeMake(300, 200); 34 35 //4.顯示 36 [self.popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 37 38 //5.設置代理 39 self.popover.delegate=self; 40 } 41 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 42 { 43 44 } 45 46 #pragma mark-代理方法 47 //popoverController消失的時候調用 48 -(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 49 { 50 } 51 //popoverController的位置改變的時候調用(如豎屏變橫屏) 52 -(void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view 53 { 54 55 } 56 //用來決定用戶點擊了蒙版后,popoverController是否可以dismiss,返回YES代表可以,返回NO代表不可以 57 -(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 58 { 59 return NO; 60 } 61 - (IBAction)buttonClick:(UIButton *)sender { 62 63 //1.新建一個popoverController并設置其內容控制器 64 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init]; 65 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc]; 66 67 //2.顯示 68 //2.1第一種方式 69 // [self.popover presentPopoverFromBarButtonItem:<#(UIBarButtonItem *)#> permittedArrowDirections:<#(UIPopoverArrowDirection)#> animated:<#(BOOL)#>]; 70 //2.2第二種方式 71 [self.popover presentPopoverFromRect:sender.bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 72 //說明:popover會指向sender.bounds這一塊矩形框,這塊矩形框以sender的左上角為坐標原點 73 //注意:注意sender.frame和sender.bounds的區別 74 75 } 76 @end

界面效果:(部分)

  

關于frame坐標計算的圖示:

  ? ??

下面兩者是等價的:

  

即如果想讓箭頭指向某一個UIView的做法有2種做法,比如指向一個button

方法1

  [popover presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

方法2

  [popover presentPopoverFromRect:button.frame inView:button.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

?

三、設置代理

代理對象

  @property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;

是否可見

  @property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;

箭頭方向

  @property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;?

關閉popover(讓popover消失)

  - (void)dismissPopoverAnimated:(BOOL)animated;

代碼說明:

1 .......2 //5.設置代理3 self.popover.delegate=self;4 }5 6 #pragma mark-代理方法7 //popoverController消失的時候調用8 -(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController9 { 10 } 11 //popoverController的位置改變的時候調用(如豎屏變橫屏) 12 -(void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view 13 { 14 15 } 16 //用來決定用戶點擊了蒙版后,popoverController是否可以dismiss,返回YES代表可以,返回NO代表不可以 17 -(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 18 { 19 return NO; 20 }

四、防止點擊UIPopoverController區域外消失

默認情況下

只要UIPopoverController顯示在屏幕上,UIPopoverController背后的所有控件默認是不能跟用戶進行正常交互的

點擊UIPopoverController區域外的控件,UIPopoverController默認會消失

?

要想點擊UIPopoverController區域外的控件時不讓UIPopoverController消失,解決辦法是設置passthroughViews屬性

@property (nonatomic, copy) NSArray *passthroughViews;

這個屬性是設置當UIPopoverController顯示出來時,哪些控件可以繼續跟用戶進行正常交互。這樣的話,點擊區域外的控件就不會讓UIPopoverController消失了

代碼示例:

1 - (IBAction)buttonClick:(UIButton *)sender {2 3 //1.新建一個popoverController并設置其內容控制器4 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init];5 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc];6 7 //設置過濾掉一些控件8 self.popover.passthroughViews=@[self.switchview];9 10 //2.顯示 11 //2.1第一種方式 12 // [self.popover presentPopoverFromBarButtonItem:<#(UIBarButtonItem *)#> permittedArrowDirections:<#(UIPopoverArrowDirection)#> animated:<#(BOOL)#>]; 13 //2.2第二種方式 14 // [self.popover presentPopoverFromRect:sender.bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 15 [self.popover presentPopoverFromRect:sender.frame inView:sender.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 16 //說明:popover會指向sender.bounds這一塊矩形框,這塊矩形框以sender的左上角為坐標原點 17 //注意:注意sender.frame和sender.bounds的區別 18 19 }

補充:

UIPopoverController這個類是只能用在iPad中的

要想在iPhone中實現popover效果,必須得自定義view,可以參考

http://code4app.com/ios/Popover-View-in-iPhone/4fa931bd06f6e78d0f000000

http://code4app.com/ios/Popup-Menu/512231ac6803fa9e08000000

?

轉載自:http://www.cnblogs.com/wendingding/p/3918204.html?

轉載于:https://www.cnblogs.com/ChrisYu/p/4660312.html

總結

以上是生活随笔為你收集整理的OS开发UI篇—popoverController使用注意的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。