精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

777久久精品一区二区三区无码| 日韩av免费看| 五月天丁香社区| 色老头在线一区二区三区| 久久亚洲综合色| 国产在线视频一区| 一级片免费网址| 成人动漫免费在线观看| 精品日韩一区二区| 蜜臀视频一区二区三区| www红色一片_亚洲成a人片在线观看_| 蜜臀精品一区二区三区在线观看| 另类天堂视频在线观看| 国产中文字幕一区二区| 国产精品无码久久久久| 亚洲高清视频在线| 亚洲欧美成人一区| 天堂成人在线观看| 精品一区二区久久久| 亚洲欧美日韩国产中文在线| 91av免费看| 狠狠狠狠狠狠狠| 久久精品色综合| 亚洲精选免费视频| 色姑娘综合网| 亚洲欧美日韩综合在线| 在线观看日韩av电影| 亚洲丝袜在线视频| 日本性生活一级片| 精品国产一区二区三区2021| 色呦呦国产精品| 国产一区二区三区小说| 日本免费在线观看| 国产目拍亚洲精品99久久精品 | 99久久这里有精品| 国产精品国产自产拍高清av| 久久99精品久久久久子伦| 国产深喉视频一区二区| 蜜桃一区二区三区在线| 日本91av在线播放| 久久久久久久黄色片| 欧美日韩国产高清| 久久影视电视剧免费网站| www..com.cn蕾丝视频在线观看免费版| heyzo高清中文字幕在线| 中文字幕亚洲不卡| 97伦理在线四区| 在线免费观看视频网站| 日本在线播放一区二区三区| 欧美在线视频网站| 亚洲婷婷综合网| 香蕉成人久久| 日本精品视频在线播放| av大片在线免费观看| 亚洲专区免费| 日本欧美一二三区| 日本a级c片免费看三区| 米奇777在线欧美播放| 日本欧美黄网站| 精品乱码一区内射人妻无码 | 手机在线观看免费av| av电影在线观看一区| 精品久久久久久一区| 激情视频网站在线观看| 国产欧美综合一区二区三区| 欧美在线观看日本一区| 久久久久在线视频| 久久精品理论片| 亚洲aa在线观看| 亚洲第一色视频| 99re6这里只有精品视频在线观看| 国产精品成人观看视频免费| 亚洲第一精品网站| 97国产一区二区| 日韩精品无码一区二区三区| 成年人视频网站在线| 亚洲欧洲99久久| 国产传媒久久久| 国产在线88av| 欧美天堂一区二区三区| 国产精品久久久久久久av福利| 精品国产乱码一区二区三区| 亚洲精品在线免费观看视频| 色欲av无码一区二区三区| 成人影院在线| 欧美高跟鞋交xxxxhd| 天天综合网久久综合网| 免费在线观看一区二区三区| 成人性生交大片免费看小说 | 3d动漫精品啪啪一区二区三区免费 | 亚洲欧美另类视频| av中文字幕在线不卡| 欧美精品一区二区三区在线四季| 奇米影视888狠狠狠777不卡| 久久免费国产精品| 三年中国中文在线观看免费播放| 性国产高清在线观看| 91女人视频在线观看| 免费一区二区三区| 超碰福利在线观看| 菠萝蜜视频在线观看一区| 欧美久久综合性欧美| av片在线免费观看| 一区二区三区中文在线观看| 999在线观看视频| 天堂中文8资源在线8| 亚洲蜜臀av乱码久久精品| av在线播放亚洲| 91大神在线观看线路一区| 欧美不卡视频一区| 中文字幕 自拍| 女生裸体视频一区二区三区| 7777kkkk成人观看| 日韩大片免费在线观看| 亚洲经典在线看| 国产精品自拍视频| av网站免费大全| 国产香蕉久久精品综合网| a级黄色片网站| 亚洲欧美电影| 欧美一二三四在线| 欧美成人短视频| 欧美亚洲一级| 97se国产在线视频| 超碰免费在线| 精品福利在线观看| 亚洲欧美日本一区二区| 免费电影一区二区三区| 久久久成人精品视频| 久久精品视频1| 国产特级黄色片| 粉嫩av一区二区三区粉嫩 | 亚洲无码久久久久久久| 99久久99久久精品免费观看 | 头脑特工队2在线播放| 九九九久久久精品| 精品日本一区二区三区在线观看| 欧美日韩视频在线播放| 欧美性videos高清精品| 亚洲av成人片色在线观看高潮| 天天操综合网| 国产精品电影在线观看| 天堂网在线观看视频| 亚洲精品国产a| 成人不卡免费视频| 日韩一区电影| 欧美高清视频在线播放| 91精品国产乱码久久久久| 精品制服美女丁香| 欧美一区免费视频| 亚洲欧美韩国| 一本久久综合亚洲鲁鲁| 日本三级欧美三级| 国产白丝精品91爽爽久久| 亚洲精品乱码视频| free欧美| 国产午夜一区二区| 精品无码一区二区三区的天堂| 久久午夜色播影院免费高清| 精品少妇一区二区三区在线| 超碰成人免费| 欧美极品少妇xxxxx| 精品久久久无码中文字幕| 亚洲三级电影全部在线观看高清| 欧美日韩在线精品| 成人性生交大片免费看在线播放| 欧美一区午夜精品| 九九热这里有精品视频| 国产精品一区二区三区乱码| 日韩video| 欧美成a人片在线观看久| 中文字幕欧美国内| 亚洲一区在线观| 亚洲天堂福利av| 无人码人妻一区二区三区免费| 一区二区在线| 97人人模人人爽视频一区二区 | 91网站黄www| 久久人妻精品白浆国产| 欧美熟乱15p| 成人免费直播live| 久久香蕉一区| 亚洲精品999| jizz国产在线| 亚洲欧美日韩成人高清在线一区| 色婷婷狠狠18禁久久| 精品91久久久久| 久久亚洲精品欧美| 国产69精品久久久久9999人| 久久精品亚洲一区| 狠狠人妻久久久久久综合麻豆| 色婷婷亚洲精品| 黄色录像一级片| 国产 日韩 欧美大片| 欧美牲交a欧美牲交| 精品国产一区二区三区香蕉沈先生 | 久久久精品网| 国产精品夜夜夜爽张柏芝| 综合久久成人| 日本精品免费观看| 国产cdts系列另类在线观看| 亚洲第一区在线| 黄色片在线观看免费| 久久国产日韩| 日韩小视频网站| 日韩成人精品一区| 粉嫩高清一区二区三区精品视频| 制服丝袜专区在线| 久久精品青青大伊人av| 国产爆初菊在线观看免费视频网站 | 日本在线一区二区| 97国产精品人人爽人人做| 成人午夜电影在线观看| 91精品国产品国语在线不卡| 欧美在线观看不卡| 亚洲激情图片一区| av女人的天堂| 成人h精品动漫一区二区三区| 不卡av免费在线| 影音先锋亚洲一区| 欧美中日韩在线| 成人在线电影在线观看视频| 国产精品对白一区二区三区| 韩国精品视频在线观看| 5252色成人免费视频| caopen在线视频| 亚洲美女在线视频| 无码精品人妻一区二区三区影院| 欧美精品第一页| 免费观看a级片| 国产成人精品免费| 超碰超碰在线观看| 久久久久网站| 亚洲一区二区三区av无码| 国语产色综合| 蜜桃av噜噜一区二区三| 成人资源在线播放| 亚洲一区二区久久久久久| 韩日精品一区| 日韩av片永久免费网站| 欧美6一10sex性hd| 欧美黑人性视频| 国产美女av在线| 色偷偷偷亚洲综合网另类| 男操女在线观看| 精品久久人人做人人爰| 亚洲国产剧情在线观看| 777午夜精品免费视频| 国产免费a视频| 一本到不卡免费一区二区| 国产精品白浆一区二小说| 亚洲欧洲综合另类在线| 国产精品suv一区二区88 | 黄色国产在线播放| 国产日韩成人精品| caopeng视频| 欧美激情在线看| 少妇精品无码一区二区免费视频| 久久综合九色综合97婷婷女人 | 丁香五月缴情综合网| av成人免费观看| 999精品嫩草久久久久久99| 亚洲自拍小视频| 亚洲不卡视频| av一区二区三区免费| 91成人入口| 国产综合第一页| 国产三级精品三级在线观看国产| 精品综合在线| 亚洲va久久久噜噜噜久久| 鲁丝一区二区三区免费| 国产精品午夜一区二区三区| 韩日午夜在线资源一区二区| 久久综合色占| 亚洲精品一区二| 天天天综合网| 91亚洲精品国产| 日韩视频一区二区三区在线播放免费观看| 国产欧美日韩小视频| 国产精品主播| 九九热免费精品视频| 麻豆国产欧美一区二区三区| 久久久精品高清| 国产成人午夜视频| 欧美一区二区三区成人精品| 欧美精彩视频一区二区三区| 伊人影院综合网| 亚洲国产三级在线| 国产一级一级国产| 欧美日韩精品三区| 精品人妻一区二区三区浪潮在线| 亚洲国产精品视频在线观看| aaa在线免费观看| 九九精品视频在线| 欧美成熟毛茸茸| 在线亚洲国产精品网| 黄色成人在线观看| 欧美一级免费视频| 亚洲视频国产精品| 欧美视频观看一区| 综合久久99| 日本三级免费观看| 国产在线视频精品一区| 实拍女处破www免费看| 国产精品国产三级国产普通话99| 久热这里有精品| 日韩欧美亚洲范冰冰与中字| 中文字幕在线日亚洲9| 精品国产欧美一区二区| 韩国av免费在线| 中文字幕av一区二区三区谷原希美| h视频在线免费观看| 国产91九色视频| 亚洲国产中文在线二区三区免| 精品无码久久久久久久动漫| 综合亚洲视频| 无码人妻精品一区二区三区66| 国产成人在线视频免费播放| 谁有免费的黄色网址| 亚洲一级不卡视频| 国产高清视频免费| 亚洲最新视频在线| 精品丝袜在线| 亚洲一区二区在线播放| 亚洲高清极品| 国产精品va无码一区二区| 在线观看视频免费一区二区三区| 国产成人黄色网址| xf在线a精品一区二区视频网站| 东方av正在进入| 91国偷自产一区二区三区观看| 99热这里只有精品1| 亚洲男人天天操| 91在线三级| 亚洲一区二区在线| 99久久99热这里只有精品| ww国产内射精品后入国产| 成人一道本在线| 成年人性生活视频| 国产精品色哟哟网站| 国产三级精品三级在线观看| 9191国产精品| 男人的天堂在线视频免费观看| 国产91在线播放精品91| 欧亚精品一区| 日日摸日日碰夜夜爽无码| 成人免费视频视频| 久久久久久久黄色| 日韩欧美一级片| 在线观看午夜av| 亚洲一区二区久久久久久| 欧美 日韩 国产一区二区在线视频| 杨幂毛片午夜性生毛片| 国产视频不卡一区| 在线免费观看国产精品| 国产一区二区三区在线观看视频| 成人勉费视频| 日本a级片久久久| 久久午夜影视| 天天操天天舔天天射| 777久久久精品| 黄色网页在线播放| 亚洲在线免费观看| 国产精品va| 高清中文字幕mv的电影| 亚洲国产精品久久艾草纯爱| 亚洲欧美激情另类| 91干在线观看| 欧美日韩大片免费观看| 国产精品一区二区羞羞答答| 国产精品视频一二| 国产精品无码免费播放| 久久偷看各类女兵18女厕嘘嘘| jizz性欧美23| www.浪潮av.com| 国产精品毛片久久久久久久| 在线免费看av片| 久久这里有精品| 激情小说一区| 少妇性饥渴无码a区免费| 国产视频视频一区| 亚洲美女性生活| 欧洲成人性视频| 日韩影院二区| 无码国产精品一区二区高潮| 欧美性高跟鞋xxxxhd| h视频在线播放| 亚洲专区国产精品| 99riav国产精品| 婷婷国产成人精品视频| 精品成人私密视频| 国产综合色区在线观看| 一本久久a久久精品vr综合| 好吊一区二区三区| 久久久久国产精品无码免费看| 日本福利一区二区| free性欧美hd另类精品| 久久久福利视频| 国产成a人亚洲| 国产偷人爽久久久久久老妇app|