日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

OS开发UI篇—popoverController使用注意

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

iOS開發(fā)UI篇—popoverController使用注意

一、設(shè)置尺寸

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

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

更好的設(shè)計(jì)是:popover的尺寸應(yīng)該由內(nèi)部控制器的內(nèi)容所決定。

內(nèi)容控制器可以自行設(shè)置自己在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 //設(shè)置控制器將來在popover中的尺寸 13 CGFloat maxH=MIN(480,self.menus.count*44); 14 //ios7以前的設(shè)置 15 // self.contentSizeForViewInPopover=CGSizeMake(150, maxH); 16 //ios7以后 17 self.preferredContentSize=CGSizeMake(150, maxH); 18 19 }

效果:

  

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

?

二、設(shè)置顯示的位置

1.設(shè)置顯示的位置有2種方法

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

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

item :圍繞著哪個UIBarButtonItem顯示

arrowDirections :箭頭的方向

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

?

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

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

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

view :rect參數(shù)是以view的左上角為坐標(biāo)原點(diǎn)(0,0)

arrowDirections :箭頭的方向

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

rect和view參數(shù)如下:

相關(guān)代碼:

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.新建一個內(nèi)容控制器 27 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init]; 28 29 //2.新建一個popoverController,并設(shè)置其內(nèi)容控制器 30 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc]; 31 32 //3.設(shè)置尺寸 33 // self.popover.popoverContentSize=CGSizeMake(300, 200); 34 35 //4.顯示 36 [self.popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 37 38 //5.設(shè)置代理 39 self.popover.delegate=self; 40 } 41 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 42 { 43 44 } 45 46 #pragma mark-代理方法 47 //popoverController消失的時候調(diào)用 48 -(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 49 { 50 } 51 //popoverController的位置改變的時候調(diào)用(如豎屏變橫屏) 52 -(void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing *)view 53 { 54 55 } 56 //用來決定用戶點(diǎn)擊了蒙版后,popoverController是否可以dismiss,返回YES代表可以,返回NO代表不可以 57 -(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController 58 { 59 return NO; 60 } 61 - (IBAction)buttonClick:(UIButton *)sender { 62 63 //1.新建一個popoverController并設(shè)置其內(nèi)容控制器 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的左上角為坐標(biāo)原點(diǎn) 73 //注意:注意sender.frame和sender.bounds的區(qū)別 74 75 } 76 @end

界面效果:(部分)

  

關(guān)于frame坐標(biāo)計(jì)算的圖示:

  ? ??

下面兩者是等價的:

  

即如果想讓箭頭指向某一個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];

?

三、設(shè)置代理

代理對象

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

是否可見

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

箭頭方向

  @property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;?

關(guān)閉popover(讓popover消失)

  - (void)dismissPopoverAnimated:(BOOL)animated;

代碼說明:

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

四、防止點(diǎn)擊UIPopoverController區(qū)域外消失

默認(rèn)情況下

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

點(diǎn)擊UIPopoverController區(qū)域外的控件,UIPopoverController默認(rèn)會消失

?

要想點(diǎn)擊UIPopoverController區(qū)域外的控件時不讓UIPopoverController消失,解決辦法是設(shè)置passthroughViews屬性

@property (nonatomic, copy) NSArray *passthroughViews;

這個屬性是設(shè)置當(dāng)UIPopoverController顯示出來時,哪些控件可以繼續(xù)跟用戶進(jìn)行正常交互。這樣的話,點(diǎn)擊區(qū)域外的控件就不會讓UIPopoverController消失了

代碼示例:

1 - (IBAction)buttonClick:(UIButton *)sender {2 3 //1.新建一個popoverController并設(shè)置其內(nèi)容控制器4 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init];5 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc];6 7 //設(shè)置過濾掉一些控件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的左上角為坐標(biāo)原點(diǎn) 17 //注意:注意sender.frame和sender.bounds的區(qū)別 18 19 }

補(bǔ)充:

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

要想在iPhone中實(shí)現(xiàn)popover效果,必須得自定義view,可以參考

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

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

?

轉(zhuǎn)載自:http://www.cnblogs.com/wendingding/p/3918204.html?

轉(zhuǎn)載于:https://www.cnblogs.com/ChrisYu/p/4660312.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。