精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS SDK:自定義Popover(彈出窗口)

移動開發 iOS
本文主要為各位介紹了iOS SDK的自定義Popover彈出窗口的學習內容,并且附帶了源代碼供大家學習之用,希望對大家有所幫助。

1.設置項目

Step 1

打開Xcode,選擇File > New > Project,創建一個新項目,選擇iOS Single View Application,再點擊Next。

Step 2

填寫一些列表格,項目名稱、組織/公司名稱以及公司標識符。在設備那個下拉菜單中選擇iPad,在這一欄下邊僅選擇Automatic Reference Counting,點擊Next。選擇一個地點存放你的文件,點擊創建。

2. 添加Navigation Controller

Step 1

添加Navigation Controller,這樣就能添加一個按鈕來展示popover。點擊AppDelegate.m,找到 application:didFinishLaunchingWithOptions:方法。添加下述代碼來創建一個 navigation controller,設置為root view controller。

  1. UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
  2. self.window.rootViewController = navController; 

Step 2

在導航欄上添加一個“+”的按鈕,然后打開ViewController.m文件,在[super viewDidLoad]下邊把如下代碼添加至viewDidLoad方法中。

  1. UIBarButtonItem *popoverButton = [[UIBarButtonItem alloc] 
  2. initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
  3.                     target:self 
  4.                     action:@selector(showPopover:)]; 
  5. self.navigationItem.rightBarButtonItem = popoverButton; 

UIBarButtonSystemItemAdd創建了一個“+”的按鈕,我們將要把它添加至導航欄的右邊,接下來我們會使用選擇器執行showPopover:方法。 

3.展示Popover

Step 1

在執行showPopover:方法前先為popover controller添加一個屬性,打開ViewController.h文件,添加如下屬性:

  1. @property (nonatomic, strong) UIPopoverController *popController; 

Step 2

回到ViewController.m文件,在類擴展中聲明showPopover:方法,如下:

  1. @interface ViewController () 
  2. - (void)showPopover:(id)sender; 
  3. @end 

Step 3

在@implementation下添加如下代碼來定義這個方法:

  1. - (void)showPopover:(id)sender 
  2.    if (self.popController.popoverVisible) { 
  3.        [self.popController dismissPopoverAnimated:YES]; 
  4.        return
  5.    } 
  6.     UIViewController *contentViewController = [[UIViewController alloc] init]; 
  7.     contentViewController.view.backgroundColor = [UIColor yellowColor]; 
  8.     UIPopoverController *popController = [[UIPopoverController alloc] initWithContentViewController:contentViewController]; 
  9.     popController.popoverContentSize = CGSizeMake(300.0f, 600.0f); 
  10.     self.popController = popController; 
  11.     [self.popController presentPopoverFromBarButtonItem:sender 
  12. permittedArrowDirections:UIPopoverArrowDirectionUp 
  13.                                     animated:YES]; 

首先檢查下popover能否展示在屏幕上。如果popover是可見的,那么會將popover隱藏起來,然后從該方法中直接return。如果 popover不可見,那么我們可以創建一個view controller,讓它展示在popover中。然后創建 popover controller,并設置大小。

4. 測試標準的Popover

我們已經創建一個標準的Popover,創建運行你的項目,點擊“+”按鈕來展現一個基本的Popover。

5. 子類化UIPopoverBackgroundView

Step 1

為了自定義popover,我們需要子類化UIPopoverBackgroundView。點擊 File > New > File, 選擇iOS Cocoa Touch Objective-C Class, 點擊Next.

Step 2

給class這一欄填上PopoverBackgroundView,從Subclass of下拉菜單中選擇UIPopoverBackgroundView。

Step 3

這里有兩個UIPopoverBackgroundView屬性需要被覆蓋,添加如下代碼來定義arrow的方向和位移。

  1. @synthesize arrowDirection  = _arrowDirection; 
  2. @synthesize arrowOffset     = _arrowOffset; 

Step 4

這里有3個類方法需要覆蓋,我們使用這個方法來定義一些值。

  1. #define kArrowBase 30.0f 
  2. #define kArrowHeight 20.0f 
  3. #define kBorderInset 8.0f 

Step 5

添加如下代碼覆蓋arrowBase, arrowHeight和contentViewInsets方法。

  1. + (CGFloat)arrowBase 
  2.     return kArrowBase; 
  3. + (CGFloat)arrowHeight 
  4.     return kArrowHeight; 
  5. + (UIEdgeInsets)contentViewInsets 
  6.     return UIEdgeInsetsMake(kBorderInset, kBorderInset, kBorderInset,       kBorderInset); 

arrowBase方法確定arrow底部的寬度,arrowHeight方法確定arrow的高度。

Step 6

添加背景色,在initWithFrame:方法的條件語句中添加如下代碼:

  1. self.backgroundColor = [UIColor grayColor]; 

6.設置Popover Background View屬性

測試popover之前,我們需要輸入和設置popover controller的 popover Background View Class Property。打開ViewController.m文件,輸入 popover background view頭文件:

  1. #import "PopoverBackgroundView.h" 

還是在ViewController.m文件中,位于我們在showPopover:方法中創建UIPopoverController的下邊,添加下邊一行代碼,

  1. popController.popoverBackgroundViewClass = [PopoverBackgroundView class]; 

7.測試Popover Background View

創建、運行項目,點擊“+”的按鈕來看下popover,可以看到標準的popover已經被取代。

8.設置陰影和圓角

wantsDefaultContentAppearance 方法決定是否在popover中展示默認的內置陰影和圓角,如果返回的是“NO”,Popover Background View將不再展示默認的陰影 和圓角,允許執行你自己的。添加如下代碼來覆蓋之前的方法:

  1. + (BOOL)wantsDefaultContentAppearance 
  2. return NO; 

9.添加Arrow

Step 1

我們需要創建和管理arrow,我們可以為image view聲明一個屬性,在類擴展中添加如下代碼:

  1. @property (nonatomic, strong) UIImageView *arrowImageView; 

現在可以對image view進行實例化,使用如下代碼替代initWithFrame:方法條件語句中的代碼:

  1. self.backgroundColor = [UIColor clearColor]; 
  2. UIImageView *arrowImageView = [[UIImageView alloc] initWithFrame:CGRectZero]; 
  3. self.arrowImageView = arrowImageView; 
  4. [self addSubview:self.arrowImageView]; 

Step 2

通過使用以下代碼來更新在PopoverBackgroundView.m定義的kBorderInset來改變border inset:

 

  1. #define kBorderInset 0.0f 

Step 3

為了畫這個arrow,我們需要聲明一個方法來展現,可以在PopoverBackgroundView.m類擴展中添加下邊這個方法聲明:

  1. - (UIImage *)drawArrowImage:(CGSize)size; 

Step 4

在@implementation下添加方法定義:

  1. - (UIImage *)drawArrowImage:(CGSize)size 
  2.     UIGraphicsBeginImageContextWithOptions(size, NO, 0); 
  3.     CGContextRef ctx = UIGraphicsGetCurrentContext(); 
  4.     [[UIColor clearColor] setFill]; 
  5.     CGContextFillRect(ctx, CGRectMake(0.0f, 0.0f, size.width, size.height)); 
  6.     CGMutablePathRef arrowPath = CGPathCreateMutable(); 
  7.     CGPathMoveToPoint(arrowPath, NULL, (size.width/2.0f), 0.0f); 
  8.     CGPathAddLineToPoint(arrowPath, NULL, size.width, size.height); 
  9.     CGPathAddLineToPoint(arrowPath, NULL, 0.0f, size.height); 
  10.     CGPathCloseSubpath(arrowPath); 
  11.     CGContextAddPath(ctx, arrowPath); 
  12.     CGPathRelease(arrowPath); 
  13.     UIColor *fillColor = [UIColor yellowColor]; 
  14.    CGContextSetFillColorWithColor(ctx, fillColor.CGColor); 
  15.     CGContextDrawPath(ctx, kCGPathFill); 
  16.     UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
  17.     UIGraphicsEndImageContext(); 
  18.     return image; 

不用輸入圖片,上述代碼可以自動生成一個arrow。

Step 5

每次popover的background view的子類的bounds 改變時,這個arrow的frame需要重新計算。我們可以通過覆蓋layoutSubviews來達到目的,為layoutSubviews添加如下代碼:

  1. - (void)layoutSubviews 
  2.     [super layoutSubviews]; 
  3.     CGSize arrowSize = CGSizeMake([[self class] arrowBase], [[self class] arrowHeight]); 
  4.     self.arrowImageView.image = [self drawArrowImage:arrowSize]; 
  5.     self.arrowImageView.frame = CGRectMake(((self.bounds.size.width - arrowSize.width) kBorderInset), 0.0f, arrowSize.width, arrowSize.height); 

10. 測試Popover

源文件:

http://down.51cto.com/data/816045

責任編輯:閆佳明 來源: cocoachina
相關推薦

2013-06-27 11:10:01

iOS開發自定義UISlider

2009-12-24 15:22:10

WPF繼承自定義窗口

2013-07-18 16:09:10

自定義iOS狀態欄iOS開發iOS學習

2021-01-20 08:58:39

iOS 14桌面圖標快捷指令

2011-08-02 11:17:13

iOS開發 View

2012-06-01 11:02:33

2017-10-25 14:07:54

APPiOSxcode

2011-08-18 09:44:33

iPhone SDK儀表控件UIDialView

2015-02-12 15:33:43

微信SDK

2009-10-30 08:47:57

Windows 7窗口排列

2012-12-24 14:42:48

iOS自定義狀態欄

2015-01-15 16:45:05

iOS源碼自定義畫圖

2015-02-12 15:38:26

微信SDK

2015-10-12 16:47:13

iOS下拉線條動畫

2016-04-06 11:14:48

iOS相機自定義

2016-12-26 15:25:59

Android自定義View

2016-11-16 21:55:55

源碼分析自定義view androi

2011-06-23 10:49:13

Qt 自定義信號

2015-01-14 15:06:48

定義相機

2009-06-08 20:13:36

Eclipse自定義控
點贊
收藏

51CTO技術棧公眾號

精品99在线观看| 99久久免费国产| 一级特黄大欧美久久久| 亚洲精品资源美女情侣酒店| 中国人体摄影一区二区三区| 国产精品视频一区在线观看| 日韩中文一区二区| 中文欧美字幕免费| 欧美在线视频在线播放完整版免费观看| 久久久久久久久久一区| 国产三级在线免费| 91国内精品| 亚洲天堂久久久久久久| 国产精品电影网| 亚洲精品国产一区黑色丝袜 | crdy在线观看欧美| 国产亚洲精品久| 国产91精品不卡视频| 日韩av手机在线播放| 不卡一本毛片| 成人的网站免费观看| 欧美寡妇偷汉性猛交| 一级日本黄色片| 91精品久久| 国产成人免费在线| 色综合视频一区中文字幕| 欧美黄色一级生活片| 澳门精品久久国产| 亚洲一卡二卡三卡四卡| 成人免费视频网站入口| 国产一级片网址| 国产成人福利av| 图片区小说区国产精品视频| 精品视频第一区| 国产精品va无码一区二区三区| 亚洲乱码精品| 欧美精品一区二区三区蜜桃| 黄色国产一级视频| 日本一二三区在线视频| 麻豆久久婷婷| 日韩综合视频在线观看| 一级做a爱视频| 搞黄网站在线看| 亚洲婷婷在线视频| 亚洲精品人成| 亚洲国产成人精品一区二区三区| 亚洲黄色影片| 一区二区福利视频| 91在线第一页| 日韩成人一区| 午夜日韩在线电影| 日韩欧美亚洲日产国产| 一区二区三区黄| 国内综合精品午夜久久资源| 日韩电影免费在线观看中文字幕| 久久久久久久片| 日本天堂在线观看| jiyouzz国产精品久久| 99电影在线观看| 欧美激情黑白配| 日本黄色精品| 欧美哺乳videos| 六月丁香婷婷在线| 国产福利在线播放麻豆| 97精品久久久午夜一区二区三区| 国产精品久久久久久亚洲调教| 欧美黄色aaa| 亚洲丝袜美腿一区| 91精品国产综合久久香蕉的特点| 国产欧美日韩网站| 亚洲免费视频一区二区三区| 国产精品久久久久婷婷| 精品伦精品一区二区三区视频| 国精产品一品二品国精品69xx | 国产日韩三级| 亚洲精品久久久久久久久久久久| 91蝌蚪视频在线观看| 日日夜夜天天综合| 亚洲一区在线观看免费| 欧美不卡在线播放| www.成人爱| 夜夜精品视频一区二区| 日韩欧美不卡在线| 伊人久久av| 欧美日韩国产精选| 看av免费毛片手机播放| a在线免费观看| 亚洲风情在线资源站| 正在播放亚洲| 伊人影院蕉久影院在线播放| 亚洲国产sm捆绑调教视频| 黄色一级片播放| 免费毛片在线看片免费丝瓜视频| 中文字幕一区二区三| 欧美成人蜜桃| 天堂av2024| 国产乱码精品一区二区三区av | 中国成人亚色综合网站| 成全电影大全在线观看| 91福利资源站| 欧美 丝袜 自拍 制服 另类| 婷婷激情一区| 色诱亚洲精品久久久久久| 欧美一区二区激情| 色操视频在线| 亚洲自拍偷拍欧美| 大香煮伊手机一区| 超级碰碰久久| 欧美一区二区国产| 深夜做爰性大片蜜桃| 欧美顶级毛片在线播放| 亚洲国产精品va在线看黑人| 亚洲成人激情小说| 天堂va欧美ⅴa亚洲va一国产| 日韩精品在线免费播放| 丝袜美腿小色网| 久久亚洲欧洲| 国产精品自产拍高潮在线观看| 波多野结衣一二区| 日本欧美在线观看| 国产狼人综合免费视频| 天天操天天干天天爽| 亚洲色图视频网站| 91蝌蚪视频在线观看| 亚洲国产aⅴ精品一区二区| 伊人激情综合网| 日韩欧美性视频| 美女91精品| 国产综合色一区二区三区| 亚州男人的天堂| 久久女同性恋中文字幕| 青青草原亚洲| 在线免费看黄网站| 亚洲精品水蜜桃| 99久热在线精品视频| 99riav视频在线观看| 欧美性少妇18aaaa视频| 中文字幕天天干| 清纯唯美激情亚洲| 中文字幕精品一区二区精品| 永久免费看片视频教学| 欧美在线91| 97国产成人精品视频| 高潮毛片又色又爽免费| 另类综合日韩欧美亚洲| 99久久精品免费看国产一区二区三区| avtt在线播放| 欧美天堂一区二区三区| 日本女人黄色片| 天天做综合网| 欧美亚洲激情在线| 香蕉久久一区二区三区| 午夜电影一区二区| 岛国精品资源网站| 99热免费精品| 91精品视频在线播放| 亚洲精选一区二区三区| 亚洲精选在线视频| 又黄又爽又色的视频| 你懂的成人av| 国产高清一区视频| 98色花堂精品视频在线观看| 日韩高清免费在线| 蜜臀99久久精品久久久久小说| 久久久99免费| av片在线免费| 懂色aⅴ精品一区二区三区| 精品日韩一区二区三区| 欧美又粗又大又长| 日本在线不卡一区| 亚洲国产一区二区三区在线| 外国成人毛片| 欧美精品在线观看| 超碰在线观看91| 国产女人水真多18毛片18精品视频| 亚洲色婷婷久久精品av蜜桃| 日韩视频一二区| 97香蕉超级碰碰久久免费的优势| 色在线免费视频| 欧美无砖专区一中文字| 夫妻性生活毛片| 日本强好片久久久久久aaa| 亚洲午夜精品久久| 国产精品粉嫩| 日韩视频免费在线观看| av手机免费看| 亚洲欧洲日韩综合一区二区| 亚洲人成无码www久久久| 欧美精品色图| 欧美在线一级va免费观看| 狠狠v欧美ⅴ日韩v亚洲v大胸| 亚洲高清免费视频| 亚洲激情视频小说| 一区二区三区成人精品| 日韩美女一区| 一本一道久久a久久| 国产成人一区三区| 日韩一二三四| 欧美二区乱c少妇| 长河落日免费高清观看| 视频一区二区三区在线| 亚洲国产精品女人| а天堂中文最新一区二区三区| 欧美精品激情在线| 成人无码一区二区三区| 日本久久一区二区| 久久国产在线观看| 中文字幕第一页久久| 久久性爱视频网站| 国产欧美91| 久久综合九色99| 精品国产18久久久久久二百| 久久视频在线直播| 国产视频第二页| 亚洲欧美偷拍三级| 国精品无码人妻一区二区三区| 免费视频一区| 色一情一区二区三区四区 | 国产高清欧美| 欧美一进一出视频| 国产精品x8x8一区二区| 91精品国产综合久久香蕉922| 99中文字幕一区| 日韩精品极品视频| 亚洲av无码乱码国产精品久久| 在线精品观看国产| 国产91在线播放九色| 国产乱淫av一区二区三区| 亚洲黄色av网址| 久久久久久久波多野高潮日日| 亚洲精品蜜桃久久久久久| 一区二区三区中文| 小说区视频区图片区| 日本少妇精品亚洲第一区| 国产精品日韩在线观看| se01亚洲视频| 国产精品成人aaaaa网站| 日本免费一区二区六区| 国产一区二区三区毛片| 一区二区日韩在线观看| 欧美午夜精品久久久| 亚洲欧美另类在线视频| 欧美午夜片在线免费观看| 日本少妇xxxx动漫| 欧美国产日产图区| 欧美图片第一页| 久久你懂得1024| 丝袜美腿中文字幕| 久久女同性恋中文字幕| 色婷婷在线影院| 久久久精品欧美丰满| 国产呦小j女精品视频| 91年精品国产| 国产一级免费大片| 国产揄拍国内精品对白| 狠狠97人人婷婷五月| 国产欧美激情| 成人在线激情网| 蜜臀av一区二区三区| heyzo亚洲| 久久激情综合| 黄色在线视频网| 久99久精品视频免费观看| 蜜桃传媒一区二区三区| 亚洲免费网站| 午夜免费一区二区| 欧美色图麻豆| 亚洲精品自在在线观看| 欧美成人milf| 欧美精品一区二区三区久久| 久久久久毛片免费观看| av免费观看久久| 欧美xxxx在线| 日韩精品另类天天更新| 97精品97| 久草视频国产在线| 久久午夜精品| 久国产精品视频| 成人激情免费网站| 久久精品成人av| 亚洲欧洲三级电影| 日本少妇性高潮| 色香色香欲天天天影视综合网| 啪啪小视频网站| 欧美色视频日本高清在线观看| 免费无码国产精品| 日韩欧美中文字幕公布| 一区二区的视频| 亚洲成人国产精品| 95在线视频| 久久免费视频网| 国产又色又爽又黄刺激在线视频| 国产91精品久久久久久久| 国产一区精品福利| 国产精品成人aaaaa网站| 日韩中文字幕| 日日夜夜精品网站| 伊人精品成人久久综合软件| av动漫在线免费观看| 亚洲在线免费| 国产免费中文字幕| 久久久久久久av麻豆果冻| 国产在线一卡二卡| 在线观看日韩电影| 欧美一区二区在线观看视频| 欧美变态口味重另类| 番号在线播放| 亚洲3p在线观看| 在线欧美激情| 日韩欧美亚洲区| 国产农村妇女毛片精品久久莱园子| av在线网址导航| 国产综合色精品一区二区三区| 成人影视免费观看| 一区二区三区鲁丝不卡| 中文字幕91爱爱| 制服丝袜激情欧洲亚洲| 欧洲伦理片一区 二区 三区| 久99久在线视频| 91福利区在线观看| 91香蕉电影院| 欧美顶级大胆免费视频| 久久精品午夜福利| 99久久亚洲一区二区三区青草| 99精品久久久久| 欧美另类久久久品| www.国产精品.com| 久久香蕉频线观| 国产日本久久| 五月天色一区| 视频一区中文字幕国产| 538国产视频| 国产精品素人一区二区| 日韩视频在线观看一区| 亚洲成在人线av| 男女羞羞视频在线观看| 成人欧美一区二区三区在线观看| 91精品国产91久久久久久密臀| 99久久免费观看| 国产一区三区三区| 91久久国产综合| 欧美日韩精品一区二区三区 | 国产欧美日韩在线视频| 欧美一级片免费在线观看| 在线观看91视频| 韩国三级av在线免费观看| 欧美在线免费看| 亚洲精品播放| 日本精品www| 国产欧美精品在线观看| 伊人成年综合网| 最近中文字幕日韩精品 | 色屁屁草草影院ccyycom| 久久av在线播放| 色妞ww精品视频7777| 欧美国产视频一区| 成人黄色小视频在线观看| 日韩成人免费在线观看| 日韩精品欧美国产精品忘忧草 | 亚洲精品韩国| 日本一区二区三区网站| 中文字幕一区二区三区四区| 国产精品国产av| 精品亚洲一区二区三区在线观看| 蜜臀久久精品| 色噜噜色狠狠狠狠狠综合色一| 捆绑调教美女网站视频一区| 美国一级片在线观看| 日韩三级在线免费观看| av成人福利| 色噜噜狠狠一区二区三区| 精品午夜一区二区三区在线观看| 国产精品嫩草av| 日本韩国欧美三级| 欧美极品另类| 国产成人精品午夜| 欧美hentaied在线观看| 黄色av电影网站| 亚洲欧洲国产日本综合| 午夜精品久久久久久久96蜜桃| 在线观看免费高清视频97| 日韩电影精品| 性欧美大战久久久久久久| 国产日韩av一区| 精品久久久中文字幕人妻| 2018日韩中文字幕| 99久久婷婷国产综合精品青牛牛| 无码播放一区二区三区| 国产精品久久久久久亚洲毛片| 亚洲AV无码精品国产| 国产成人啪精品视频免费网| 在线精品国产| 黑人巨大精品欧美| 7777精品伊人久久久大香线蕉完整版 | 无码人妻一区二区三区线| 久久天天躁狠狠躁夜夜躁| 天天躁日日躁狠狠躁欧美| 黄色大片在线免费看| 亚洲国产高清在线观看视频| 亚洲成人一级片|