UI控件及方法大集合

廢話不多說匪煌,直接上干貨


---------------------------------------------------------------------

(1)

一、main.m

1、main函數(shù),程序唯一的入口

2、UIApplicationMain函數(shù)函數(shù)作用

1)創(chuàng)建一個(gè)應(yīng)用程序UIApplication對象扎唾,他是應(yīng)用程序的象征,一個(gè)UIApplication對象就代表一個(gè)應(yīng)用程序

2)指定誰管理應(yīng)用程序的生命周期

2)建立一個(gè)事件循環(huán)來捕捉處理用戶的行為

3南缓、永遠(yuǎn)不用嘗試改變main.m中的內(nèi)容

二胸遇、程序的生命周期

1、UIApplication對象實(shí)例化后汉形,程序啟動(dòng)時(shí)首先會(huì)調(diào)用該方法

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

2纸镊、當(dāng)應(yīng)用程序?qū)⒁M(jìn)入非活動(dòng)狀態(tài)執(zhí)行,比如來電話了概疆、鎖屏等逗威。

- (void)applicationWillResignActive:(UIApplication *)application

3、當(dāng)應(yīng)用程序進(jìn)入活動(dòng)狀態(tài)執(zhí)行岔冀,這個(gè)剛好跟上面那個(gè)方法相反

- (void)applicationDidBecomeActive:(UIApplication *)application

4凯旭、一般程序進(jìn)入后臺(tái),就會(huì)進(jìn)入非活躍狀態(tài)使套,但如果你的程序支持后臺(tái)罐呼,程序在后臺(tái)也保持活躍狀態(tài)

- (void)applicationDidEnterBackground:(UIApplication *)application

5、程序進(jìn)入前臺(tái)

- (void)applicationWillEnterForeground:(UIApplication *)application

6侦高、當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用嫉柴,通常是用來保存數(shù)據(jù)和一些退出前的清理工作

- (void)applicationWillTerminate:(UIApplication *)application

7、找到info.plist文件奉呛,添加Application does not run in background计螺,并設(shè)置YES期奔,使應(yīng)用不支持后臺(tái)操作,一旦退到后臺(tái)程序就退出

8危尿、練習(xí)

驗(yàn)證應(yīng)用程序的聲明周期

三呐萌、UIWindow

1、在iOS中谊娇,使用窗口與試圖在屏幕上顯示應(yīng)用程序的內(nèi)容肺孤,窗口本身不具有任何可見的內(nèi)容,但他對于應(yīng)用程序的試圖提供一個(gè)基本的容器济欢,試圖定義你想要的一些內(nèi)容赠堵,例如:圖像、文本法褥、表格等等

2茫叭、程序中每個(gè)時(shí)刻只能有一個(gè)UIWindow是keyWindow,通常應(yīng)用程序只有一個(gè)window

3、iOS程序啟動(dòng)完畢后半等,會(huì)首先創(chuàng)建一個(gè)UIWindow

4揍愁、一個(gè)iOS程序之所以能顯示到屏幕上,完全是因?yàn)樗蠻IWindow,也就是說沒有UIWindow杀饵,就看不見任何UI界面

5莽囤、常用方法

1)讓當(dāng)前UIWindow變成keyWindow(主窗口)

- (void)makeKeyWindow;

2)讓主窗口顯示出來

- (void)makeKeyAndVisible;

6、練習(xí)

自己創(chuàng)建一個(gè)window作為主窗口

四切距、程序的完整啟動(dòng)過程

1朽缎、main函數(shù)

2、UIApplicationMain

1)創(chuàng)建UIApplication對象

2)創(chuàng)建UIApplication的delegate對象

3谜悟、delegate對象開始處理(監(jiān)聽)系統(tǒng)事件

1)程序啟動(dòng)完畢的時(shí)候, 就會(huì)調(diào)用代理的application:didFinishLaunchingWithOptions:方法

2)在application:didFinishLaunchingWithOptions:中創(chuàng)建UIWindow

3)創(chuàng)建和設(shè)置UIWindow的rootViewController

4)顯示窗口

五话肖、手機(jī)屏幕的幾個(gè)概念

1、UIScreen

可以充當(dāng)iOS物理屏幕的替代者葡幸,

[UIScreen mainScreen] bounds] 能夠獲取屏幕大小

2最筒、屏幕尺寸

指具體的屏幕物理長度,以屏幕的對角線的長度作為試試

3礼患、像素

圖像由一個(gè)個(gè)點(diǎn)組成是钥,這個(gè)點(diǎn)叫做像素

4、屏幕分辨率

指屏幕屏幕上總共的物理像素點(diǎn)

5缅叠、屏幕尺寸

設(shè)備? ? ? 屏幕尺寸? 分辨率(pt) reader 分辨率(px)

3GS? ? ? 3.5? ? ? 320*480? @1x? ? 320*480

4/4S? ? ? 3.5? ? ? 320*480? @2x? ? 640*960

5/5S/5C? 4.0? ? ? 320*568? @2x? ? 750*134

6? ? ? ? 4.7? ? ? 375*667? @2x? ? 750*1334

6P? ? ? ? 5.5? ? ? 414*736? @3x? ? 1242*2208

pt: 用于計(jì)算屏幕上的坐標(biāo)

六悄泥、iOS坐標(biāo)系統(tǒng)

1、iPhone的試圖坐標(biāo)系是以左上角為原點(diǎn)

2肤粱、每一個(gè)view的frame所使用的坐標(biāo)系以它的父試圖的左上角為原點(diǎn)

3弹囚、試圖結(jié)構(gòu)和相關(guān)函數(shù)

//試圖顯示的位置

CGPoint point = CGPointMake(x,y)

//試圖顯示的大小

CGSize size = CGSizeMake(width,height)

//試圖顯示的位置和大小

CGRect rect = CGRectMake(x,y,width,height);

4、frame/Bounds/center

frame: 包含試圖的位置和大小

Bounds:包含試圖的大小领曼,位置默認(rèn)是(0鸥鹉,0)

center:包含試圖中心點(diǎn)所在的位置


(2)


一蛮穿、UIViwe基本概念

1、iPhone上看到的控件大部分都是UIView的子類

2毁渗、UIView的三個(gè)作用

布局践磅、動(dòng)畫、事件傳遞

二灸异、UIView的常用方法

UIKit是一個(gè)提供了在iOS上實(shí)現(xiàn)圖形府适,事件驅(qū)動(dòng)程序的框架,能看到的到的試圖都在UIKit框架中

UIView是視圖的基類

1肺樟、 基本的添加和刪除

// 添加子視圖

addSubview:

// 視圖插入到指定索引位置

insertSubview:atIndex:

// 視圖插入指定視圖之上

insertSubview:aboveSubview:

// 視圖插入指定視圖之下

insertSubview:belowSubview:

// 把視圖移動(dòng)到最頂層

bringSubviewToFront:

// 把視圖移動(dòng)到最底層

sendSubviewToBack:

//把兩個(gè)索引對應(yīng)的視圖調(diào)換位置

exchangeSubviewAtIndex:withSubviewAtIndex

// 把視圖從父視圖中移除

removeFromSuperview

2檐春、查找試圖

viewWithTag

subViews

3、常用屬性

alpha? ? ? ? ? ? ? ? ? 透明度

backgroundColor? ? ? ? 背景顏色

subViews? ? ? ? ? ? ? 子視圖集合

hidden? ? ? ? ? ? ? ? 是否隱藏

//標(biāo)簽值

tag

//父視圖

superview

//是否響應(yīng)觸摸事件

userInteractionEnabled

4么伯、坐標(biāo)系統(tǒng)變換

在OC中疟暖,通過transform屬性可以修改對象的平移、縮放比例和旋轉(zhuǎn)角度

1田柔、CGAffineTransformScale? ? 對視圖比例縮放

2俐巴、CGAffineTransformRotate? 對視圖做變焦旋轉(zhuǎn)

3、CGAffineTransformTranslate 對視圖在原來的位置上做平移

5凯楔、動(dòng)畫

開始動(dòng)畫窜骄,將改變屬性的代碼放在開始和提交之前

[UIView beginAnimations:nil context:nil]

提交動(dòng)畫

[UIView commitAnimations]之間

當(dāng)動(dòng)畫即將開始時(shí)執(zhí)行

+ (void)setAnimationWillStartSelector:(SEL)selector? 執(zhí)行delegate對象的selector

當(dāng)動(dòng)畫結(jié)束時(shí)執(zhí)行

+(void)setAnimationDidStopSelector:(SEL)selector

動(dòng)畫的持續(xù)時(shí)間,秒為單位

+ (void)setAnimationDuration:(NSTimeInterval)duration

動(dòng)畫延遲delay秒后再開始

+ (void)setAnimationDelay:(NSTimeInterval)delay

動(dòng)畫的開始時(shí)間摆屯,默認(rèn)為now

+ (void)setAnimationStartDate:(NSDate *)startDate

動(dòng)畫的重復(fù)次數(shù)

+ (void)setAnimationRepeatCount:(float)repeatCount

如果設(shè)置為YES,代表動(dòng)畫每次重復(fù)執(zhí)行的效果會(huì)跟上一次相反

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses


(3)


一、UIViewController的基本概念

1糠亩、見名知意虐骑,試圖控制器

3、每個(gè)試圖控制器都自帶一個(gè)試圖赎线,并且負(fù)責(zé)這個(gè)試圖相關(guān)的一切事務(wù)

4廷没、對于iOS應(yīng)用程序來說,每一個(gè)頁面都是都是一個(gè)控制器垂寥,通過切換不同的控制器颠黎,來實(shí)現(xiàn)切換不同的界面

4、在MVC體系中負(fù)責(zé)Model與View的通信

5滞项、檢測設(shè)備旋轉(zhuǎn)以及內(nèi)存警告

想要App支持某個(gè)方向狭归,需要兩個(gè)設(shè)置:

1) Deployment Info 中,勾選 Device Orientation

2) 在控制器中文判,重寫 supportedInterfaceOrientations 方法过椎。(如不重寫,IPad 默認(rèn)是UIInterfaceorientationMaskAll , IPhone 默認(rèn)是 UIInterfaceOrientationMaskAllButUpsideDown )

模擬器模擬內(nèi)存警告

選中模擬器->hardware->simulate memory warning

6戏仓、UIViewController是所有試圖控制器類的基類疚宇,定義了試圖控制器的基本功能

二亡鼠、UIViewController的生命周期

0、每次訪問控制器的view,view是nil的話就會(huì)自動(dòng)調(diào)用該方法敷待,如果重寫在這個(gè)方法內(nèi)必須給控制器設(shè)置一個(gè)根試圖间涵,如果不給的話程序就會(huì)無限循環(huán)直到程序奔潰

loadView

1、控制器的View加載完畢

viewDidLoad

2榜揖、View即將顯示到window上

viewWillAppear

3浑厚、view顯示完畢

viewDidAppear

4、View即將從window上移除

viewWillDisappear

5根盒、view從window上移除完畢

viewDidDisappear

6钳幅、view即將銷毀的時(shí)候調(diào)用

viewWillUnload

7、view銷毀完畢的時(shí)候調(diào)用

viewDidUnload

8炎滞、當(dāng)接收到內(nèi)存警告的時(shí)候

didReceiveMemoryWarning

9敢艰、具體流程查看課件中的圖片

五、模態(tài)試圖的使用

1、模態(tài)視圖不是專門的某個(gè)類痰憎,而是通過視圖控制器的presentModalViewController:方法彈出的視圖我們都稱為模態(tài)視圖

2郎汪、模態(tài)視圖出現(xiàn)的場景一般是臨時(shí)彈出的窗口,譬如:登陸窗口

3牡属、通過設(shè)置將要彈出控制器的modalTransitionStyle屬性設(shè)置不同的動(dòng)畫效果

3、彈出扼睬,

presentModalViewController:

4逮栅、取消:

dismissModalViewControllerAnimated: 方法關(guān)閉窗口

UIControl的事件

1、UIControlEventTouchDown

單點(diǎn)觸摸按下事件:用戶點(diǎn)觸屏幕窗宇,或者又有新手指落下的時(shí)候措伐。

2、UIControlEventTouchDownRepeat

多點(diǎn)觸摸按下事件军俊,點(diǎn)觸計(jì)數(shù)大于1:用戶按下第二侥加、三、或第四根手指的時(shí)候粪躬。

3担败、UIControlEventTouchDragInside

當(dāng)一次觸摸在控件窗口內(nèi)拖動(dòng)時(shí)。

4镰官、當(dāng)一次觸摸在控件窗口之外拖動(dòng)時(shí)

UIControlEventTouchDragOutside

5提前、當(dāng)一次觸摸從控件窗口之外拖動(dòng)到內(nèi)部時(shí)

UIControlEventTouchDragEnter

6、當(dāng)一次觸摸從控件窗口內(nèi)部拖動(dòng)到外部時(shí)

UIControlEventTouchDragExit

7朋魔、所有在控件之內(nèi)觸摸抬起事件

UIControlEventTouchUpInside

9岖研、點(diǎn)擊手指抬起時(shí)

UIControlEventTouchUpInside

10、所有觸摸取消事件,即一次觸摸因?yàn)榉派狭颂嗍种付蝗∠镌蛘弑簧湘i或者電話呼叫打斷害淤。

UIControlEventTouchCancel


(3)

一、UINavigationController(導(dǎo)航控制器)

1拓售、基本概念

1)繼承于UIViewControler

2)相當(dāng)于一個(gè)容器用來管理有層級(jí)關(guān)系的控制器

3)采用棧的方式管理所有controller,每個(gè)controller管理各自的試圖窥摄。

棧:

向棧中添加一個(gè)對象的操作稱為入棧

在棧中刪除一個(gè)對象的操作稱為出棧

第一個(gè)入棧的對象叫做基棧

最后一個(gè)入棧的對象,叫做棧頂

當(dāng)前顯示的試圖控制器础淤,即為棧頂崭放。

對象出棧、入棧的方式:后進(jìn)先出鸽凶,先進(jìn)后出

4)提供返回上一級(jí)controller的默認(rèn)button和方法

5)創(chuàng)建時(shí)要給導(dǎo)航控制器設(shè)置根控制器

2币砂、結(jié)構(gòu),包含三個(gè)部分

1)navigationBar

2) 內(nèi)容試圖

3)toolBar,因?yàn)椴怀S貌=模J(rèn)是隱藏的

3决摧、常用屬性和方法

屬性

1)獲取到在棧中最頂層的試圖控制器

topViewController

2)獲取到在棧中當(dāng)前顯示的試圖控制器

visibleViewController

3)在棧中當(dāng)前有的試圖控制器

viewControllers

4)隱藏導(dǎo)航欄

navigationBarHidden

5)獲取到導(dǎo)航欄

navigationBar

方法

1)初始化一個(gè)根視圖控制器,在棧的最底層

initWithRootViewController:(UIViewController *)rootViewController;

2)往棧中壓入一個(gè)新的控制器

pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

3)移除棧頂?shù)囊粋€(gè)控制器

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

4)彈出到指定的視圖控制器中凑兰,返回的數(shù)組代表要出棧中移除的對象

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

5)回到根視圖控制器

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

二掌桩、練習(xí)

在第二個(gè)視圖控制器在添加一個(gè)UIButton實(shí)例,單擊該按鈕時(shí)姑食,壓入一個(gè)新的視圖控制器波岛。在該視圖中添加四個(gè)按鈕,依次實(shí)現(xiàn)音半,

1则拷、壓入一個(gè)新的視圖控制器;

2祟剔、返回上一個(gè)視圖控制器隔躲;

3、返回根視圖控制器物延;

4、返回指定的視圖控制器

三仅父、UINavigationBar(導(dǎo)航欄)

1叛薯、基本概念

1)和導(dǎo)航控制器一樣,是一個(gè)容器笙纤,用來顯示導(dǎo)航欄上的試圖耗溜,

2) 豎屏44 橫屏32

2、配置外觀

1) 設(shè)置導(dǎo)航欄樣式

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

2)設(shè)置導(dǎo)航欄是否透明省容,設(shè)為不透明能夠屏蔽導(dǎo)航欄對試圖frame的影響

self.navigationController.navigationBar.translucent = NO;

1) 配置背景顏色

self.navigationController.navigationBar.barTintColor = [UIColor redColor];

2)配置背景圖片

self.navigationController.navigationBar setBackgroundImage: forBarMetrics:

3) 改變導(dǎo)航欄上默認(rèn)按鈕顏色

self.navigationBar.tintColor

3抖拴、配置內(nèi)容

1)每個(gè)controller都有專屬的navigationItem

1)通過配置不同控制器的navigationItem讓不同控制器的導(dǎo)航欄顯示不同的內(nèi)容

2)navigationItem的常用屬性

leftBarButtonItem

rightBarButtonItem

backBarButtonItem

title

titleView

3) backBarButtonItem是由上一層控制器控制的

4) 導(dǎo)航欄的prompt屬性,通過navigationItem來設(shè)置,其主要作用是用于提示用戶阿宅。比如候衍,用戶正在請求網(wǎng)絡(luò)數(shù)據(jù)時(shí),提示用戶數(shù)據(jù)正在加載洒放。待加載完成后可以將它的值設(shè)置為nil蛉鹿,取消顯示。

四往湿、練習(xí)

將自己項(xiàng)目的注冊按鈕放到右上角妖异,修改系統(tǒng)自帶的返回按鈕


(4)


一、分欄控制器的基本概念

1领追、UITabBarController和UINavigationController一樣是用來管理試圖控制器的

2他膳、與導(dǎo)航控制器不同,tab控制器使用數(shù)組管理子試圖控制器的绒窑,并且子試圖之間是平等關(guān)系棕孙,導(dǎo)航控制器所管理的試圖控制器之間上

練習(xí):

1、創(chuàng)建若干個(gè)子視圖控制器(它們是并列的關(guān)系)

2回论、創(chuàng)建一個(gè)數(shù)組散罕,將已創(chuàng)建的子視圖控制器,添加到數(shù)組中

3傀蓉、創(chuàng)建UITabBarController實(shí)例

4欧漱、tabBarController.viewControllers = viewControllers;

5、添加到window的rootViewController中

二葬燎、分欄試圖控制器的結(jié)構(gòu)

1误甚、有兩部分組成

1)contentView:顯示當(dāng)前controller的view

2) tabBar(標(biāo)簽欄):負(fù)責(zé)切換顯示controller, 高度為49

2、tabBar

1) 標(biāo)簽欄是唯一的谱净,就好比導(dǎo)航控制器的導(dǎo)航欄

2) 設(shè)置分欄的顏色

barTintColor

3) 設(shè)置分欄的背景圖片

backgroundImage

4)標(biāo)簽欄的顯示與隱藏

hidden

5)設(shè)置導(dǎo)航控制器默認(rèn)顯示的控制器

selectedIndex

3窑邦、tabBarItem

1) 用來控制一組控制器的切換,類似選項(xiàng)卡壕探,每個(gè)Tab控制一個(gè)試圖控制器冈钦,點(diǎn)擊哪個(gè)tab就顯示對應(yīng)的試圖控制器,當(dāng)前的試圖控制器

2) 每個(gè)tabBarItem都可以設(shè)置title李请、image/selectedImages瞧筛、badgeValue

3) 設(shè)置選中的顏色

分欄控制器.tabBar.tintColor

3) TabBar只能顯示五個(gè)tab Item,如果超過五個(gè)則會(huì)自動(dòng)生成個(gè)Morede 標(biāo)簽顯示剩余的Tab,這些Tab可以通過編輯顯示在UITabBar上

4) 自定義Item

[UITabBarItem alloc]initWithTitle: image: tag:

[UITabBarItem alloc]initWithTabBarSystemItem:tag:

3导盅、支持國際化

1)找到plist文件

2)右鍵? add row

3)Localizations? 默認(rèn)就一個(gè)ENGLISH

4)在 添加一個(gè) Item 1? Chinese (simplified)

練習(xí):

1较幌、初始化我們需要在tabBarController中顯示的視圖控制器

2、初始化UItabBarItem

3白翻、在子視圖控制器中添加UItabBarItem

4乍炉、我們將子視圖控制器放入數(shù)組中

5、初始化tabBarcontroller

6、將數(shù)組放入tabBar控制器中岛琼,方法viewControllers

三底循、代理監(jiān)聽分欄控制器的切換

1、視圖將要切換時(shí)調(diào)用衷恭,viewController為將要顯示的控制器此叠,如果返回的值為NO,則無法點(diǎn)擊其它分欄了

- (BOOL)tabBarController:(UITabBarController *)tabBarControllershouldSelectViewController:(UIViewController *)viewController

2随珠、視圖已經(jīng)切換后調(diào)用灭袁,viewController 是已經(jīng)顯示的控制器

- (void)tabBarController:(UITabBarController *)tabBarControllerdidSelectViewController:(UIViewController *)viewController

3、將要開始自定義item的順序

- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers

4窗看、將要結(jié)束自定義item的順序

- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed

5茸歧、結(jié)束自定義item的順序

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed

四、集成分欄控制器和導(dǎo)航控制器

1显沈、在Tab Bar控制器中某一個(gè)Tab中使用Navigation控制器,這是最常見的用法软瞎,我們將在下面具體講解這個(gè)用法

2、在一個(gè)Navigation控制器控制下的某一個(gè)或某些控制器是Tab Bar控制器拉讯,這時(shí)對該Tab Bar控制器的壓入和彈出方法和普通視圖控制器一樣

五涤浇、總結(jié)

1、UINavigationController魔慷、UITabBarController和UIViewController通常都是組合出現(xiàn)的只锭,一定要熟練使用

2、UINavigationController院尔、UITabBarController都是UIViewController的子類蜻展,管理的都是UIViewContrller

3、UINavigationController可以嵌套UITabBarController

4邀摆、UITabBarController可以嵌套UINavigationController


(5)


一纵顾、表視圖的介紹

1、表視圖栋盹,是iOS中最重要的試圖施逾,很多應(yīng)用程序都會(huì)使用到,

2例获、表試圖里面可以放很多行信息

3音念、表視圖的兩種風(fēng)格

1)普通風(fēng)格

UITableViewStylePlain

2)分組風(fēng)格

UITableViewStyleGrouped

3)UITableViewStylePlain和UITableViewStyleGrouped。這兩者操作起來其實(shí)并沒有本質(zhì)區(qū)別躏敢,只是后者按分組樣式顯示前者按照普通樣式顯示而已。

二整葡、表視圖的基本結(jié)構(gòu)

1件余、表視圖有表頭、表尾、中間一連串單元格試圖組成

1)設(shè)置表頭

tableHeaderView

2)設(shè)置單元格試圖

UITableViewCell啼器,單元格也可以分段顯示旬渠,每一段都可以通過代理設(shè)置段頭和段尾

2)設(shè)置表尾

tableFooterView

3) tableView的常用屬性和方法

設(shè)置表視圖分割線風(fēng)格

@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;

設(shè)置表視圖分割線顏色,默認(rèn)標(biāo)準(zhǔn)灰色

@property(nonatomic,retain) UIColor *separatorColor;

設(shè)置表視圖的頭部視圖

@property(nonatomic,retain) UIView *tableHeaderView;

設(shè)置表視圖的尾部視圖

@property(nonatomic,retain) UIView *tableFooterView;

設(shè)置表視圖單元格的行高

@property(nonatomic) CGFloat rowHeight;

設(shè)置表視圖背景

@property(nonatomic, readwrite, retain) UIView *backgroundView

刷新表視圖單元格中數(shù)據(jù)

- (void)reloadData;

顯示指示條

showsVerticalScrollIndicator

設(shè)置表視圖section頭部行高

@property(nonatomic) CGFloat sectionHeaderHeight;

設(shè)置表視圖section尾部部行高

@property(nonatomic) CGFloat sectionFooterHeight

三端壳、單元格的顯示

1告丢、單元格的位置表示

NSIndexPath:能表示當(dāng)前cell是tableView的第幾段第幾行

2、單元格的創(chuàng)建

UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

cell的樣式

1)UITableViewCellStyleDefault

左側(cè)顯示textLabel损谦,imageView顯示在最左邊

2)UITableViewCellStyleValue1

左側(cè)顯示textLabel岖免、右側(cè)顯示detailTextLabel,imageView顯示在最左邊

3)UITableViewCellStyleValue2

左側(cè)依次顯示textLabel(默認(rèn)藍(lán)色)和detailTextLabel照捡,imageView可選

4)UITableViewCellStyleSubtitle

左上方顯示textLabel颅湘,左下方顯示detailTextLabel,imageView顯示在最左邊

cell的輔助圖標(biāo) accessoryType

1) 不顯示任何圖標(biāo)

UITableViewCellAccessoryNone,

2) 跳轉(zhuǎn)指示圖標(biāo)

UITableViewCellAccessoryDisclosureIndicator

3) 內(nèi)容詳情圖標(biāo)和跳轉(zhuǎn)指示圖標(biāo)

UITableViewCellAccessoryDetailDisclosureButton

4) 勾選圖標(biāo)

UITableViewCellAccessoryCheckmark

5) 內(nèi)容詳情圖標(biāo)

UITableViewCellAccessoryDetailButton

5) 自定義輔助圖標(biāo)

accessoryView屬性

3、cell的常用屬性

1)設(shè)置cell的背景試圖

backgroundView

2)設(shè)置選中的cellbei的背景圖片

selectedBackgroundView

3) 設(shè)置選中時(shí)的樣式

selectionStyle

練習(xí):不分組的名人錄

四栗精、數(shù)據(jù)源方法(UITableViewDatasource)

1闯参、實(shí)例化表視圖時(shí),必須要實(shí)現(xiàn)他的數(shù)據(jù)源方法悲立,以此來完成表中數(shù)據(jù)的配置鹿寨,一般來說數(shù)據(jù)源方法是用來配置表中的數(shù)據(jù)

2、常用數(shù)據(jù)源方法

1)配置section中含有行數(shù)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

2)創(chuàng)建單元格實(shí)例

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

3) 配置表視圖section個(gè)數(shù)薪夕,默認(rèn)為1

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

4)section中的頭部視圖的標(biāo)題

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

5)section中的尾部視圖的標(biāo)題

- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

/* 表視圖的編輯 移動(dòng)脚草、刪除等 */

6)指定單元格是否支持編輯

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath;

7)指定單元格是否支持移動(dòng)

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath*)indexPath;

8)用戶編輯了哪一個(gè)單元格,在這里執(zhí)行刪除操作

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath;

9)實(shí)現(xiàn)此方法寥殖,移動(dòng)單元格

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;

五玩讳、代理方法(UITableViewDelegate)

1、一般是處理表視圖基本樣式(單元格高度)以及捕捉選中單元格事件

2嚼贡、常用代理方法

1)配置行高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

2)設(shè)置section 頭部熏纯、尾部視圖的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

3)自定義section頭部、尾部視圖粤策,注意:需要指定高度

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

4)用戶單擊單元格中輔助按鈕時(shí)樟澜,調(diào)用該方法

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

5)用戶單擊單元格,調(diào)用該方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

6)取消選中單元格時(shí)叮盘,調(diào)用該方法

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);

7)設(shè)置單元格編輯樣式

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

練習(xí):分組的名字錄

1秩贰、設(shè)置段頭、段尾

2柔吼、自定義段頭段尾

一毒费、表視圖常用屬性和方法

屬性

1、設(shè)置表視圖分割線風(fēng)格

@property(nonatomic) UITableViewCellSeparatorStyle separatorStyle;

2愈魏、設(shè)置表視圖分割線顏色觅玻,默認(rèn)標(biāo)準(zhǔn)灰色

@property(nonatomic,retain) UIColor *separatorColor;

3想际、設(shè)置表視圖的頭部視圖

@property(nonatomic,retain) UIView *tableHeaderView;

4、設(shè)置表視圖的尾部視圖

@property(nonatomic,retain) UIView *tableFooterView;

5溪厘、設(shè)置表視圖單元格的行高

@property(nonatomic) CGFloat rowHeight;

6胡本、設(shè)置表視圖背景

@property(nonatomic, readwrite, retain) UIView *backgroundView

7、刷新表視圖單元格中數(shù)據(jù)

- (void)reloadData;

8畸悬、設(shè)置表視圖section頭部行高

@property(nonatomic) CGFloat sectionHeaderHeight;

9侧甫、設(shè)置表視圖section尾部部行高

@property(nonatomic) CGFloat sectionFooterHeight;

10、 刷新表視圖section中數(shù)據(jù)

- (void)reloadSectionIndexTitles

11蹋宦、默認(rèn)為NO披粟,不可以編輯,設(shè)置時(shí)妆档,不存在動(dòng)畫效果

@property(nonatomic,getter=isEditing) BOOL editing;

12僻爽、覆蓋此方法,存在動(dòng)畫效果

- (void)setEditing:(BOOL)editing animated:(BOOL)animated;

13贾惦、默認(rèn)為YES胸梆,當(dāng)表視圖不在編輯時(shí),單元格是否可以選中

@property(nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);

14须板、默認(rèn)為NO碰镜,當(dāng)表視圖在編輯時(shí),單元格是否可以選中

@property(nonatomic) BOOL allowsSelectionDuringEditing;

15习瑰、默認(rèn)為NO绪颖,是否可以同時(shí)選中多個(gè)單元格,注意版本問題

@property(nonatomic) BOOL allowsMultipleSelection

17甜奄、 默認(rèn)為NO柠横,在編輯狀態(tài)下時(shí),是否可以同時(shí)選中多個(gè)單元格课兄,注意版本問題

@property(nonatomic) BOOL allowsMultipleSelectionDuringEditing

方法

1牍氛、指定一個(gè)cell,返回一個(gè)NSIndexPath實(shí)例烟阐,如果cell沒有顯示搬俊,返回nil

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;

2、指定一個(gè)范圍蜒茄,返回一個(gè)數(shù)組唉擂,內(nèi)容是NSIndexPath實(shí)例,指定rect無效檀葛,返回nil

- (NSArray *)indexPathsForRowsInRect:(CGRect)rect;

3玩祟、指定一個(gè)NSIndexPath,返回一個(gè)cell實(shí)例屿聋,如果cell沒有顯示卵凑,返回為nil

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;

4庆聘、根據(jù)顯示的cell,返回一組cell實(shí)例的數(shù)組勺卢,如果沒有顯示,返回nil

- (NSArray *)visibleCells;

5象对、根據(jù)顯示的cell黑忱,返回一組NSIndexPath實(shí)例的數(shù)組,如果沒有顯示勒魔,返回nil

- (NSArray *)indexPathsForVisibleRows;

6甫煞、滑動(dòng)到指定的位置,可以配置動(dòng)畫

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

7冠绢、插入一行cell抚吠,指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果

- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

8、刪除一行cell弟胀, 指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果

- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

9楷力、刷新一個(gè)行cell,指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

10孵户、移動(dòng)cell的位置萧朝,指定一個(gè)實(shí)現(xiàn)動(dòng)畫效果

- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath*)newIndexPath NS_AVAILABLE_IOS(5_0);


(6)


-、表視圖的編輯狀態(tài)

1夏哭、表視圖的編輯狀態(tài)有兩種

insert和delete

2检柬、實(shí)現(xiàn)表視圖編輯的步驟

1)讓tableview處于編輯狀態(tài)

self.tableView.editing

2)通過代理方法確定tableView處于哪種狀態(tài)(添加還是刪除)

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

3)選擇添加或者刪除通過代理方法來做不同的處理

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

二、單元格的移動(dòng)

只需實(shí)現(xiàn)兩個(gè)代理方法

1竖配、實(shí)現(xiàn)代理方法何址,讓tableView的單元格支持移動(dòng),如果該方法返回為NO进胯,則不支持單元格的移動(dòng)用爪,該方法一般可省略

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath

2、實(shí)現(xiàn)代理方法龄减,指定從哪里移到哪里

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

一项钮、謂詞的基本概念

cocoa中提供了NSPredicate類,指定過濾器的條件希停,將符合條件的對象保留下來

二烁巫、創(chuàng)建謂詞的步驟

1、設(shè)置謂詞條件

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age <= 28"];

2宠能、使用謂詞

1) 判斷當(dāng)前對象是滿足條件

[predicate evaluateWithObject:id]

2) 將數(shù)組中滿足條件的內(nèi)容翻到數(shù)組中并返回該數(shù)組

[array filteredArrayUsingPredicate:predicate];

三亚隙、運(yùn)算符,謂詞中的字符串用單引號(hào)括起來

1、邏輯運(yùn)算符 &&(AND) ||(OR)

[NSPredicate predicateWithFormat:@"age<25 || age>27"];

2违崇、根據(jù)關(guān)鍵字查詢 IN

[NSPredicate predicateWithFormat:@"name in {'tom-8','jack-3','xxx'}"];

[NSPredicate predicateWithFormat:@"name in %@",inArray];

3阿弃、檢查某個(gè)字是否以**開頭? BEGINSWITH

[NSPredicate predicateWithFormat:@"name BEGINSWITH 't' "];

4诊霹、檢查某個(gè)單詞是否已**結(jié)尾 ENDSWITH

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name ENDSWITH 't' "];

5、是否包含某個(gè)字符 CONTAINS

[NSPredicate predicateWithFormat:@"name CONTAINS 'a'"];

6渣淳、檢查包含某個(gè)字符(模糊查詢) Like,?和*可作為通配符脾还,其中?匹配1個(gè)字符,*匹配0個(gè)或者多個(gè)字符

[NSPredicate predicateWithFormat:@"name like '??c*'"];


(7)


一入愧、事件

1鄙漏、在iOS上,事件有多種形式

1)觸摸事件

2)運(yùn)動(dòng)事件

3)遠(yuǎn)程控制事件

2棺蛛、UIView不接收觸摸事件的三種情況

1.不接收用戶交互

userInteractionEnabled = NO

2.隱藏

hidden = YES

3.透明

alpha = 0.0 ~ 0.01

提示:UIImageView的userInteractionEnabled默認(rèn)就是NO怔蚌,因此UIImageView以及它的子控件默認(rèn)是不能接收觸摸事件的

二、事件處理基本方法

1旁赊、一個(gè)或多個(gè)手指觸碰屏幕

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

2桦踊、一個(gè)或多個(gè)手指在屏幕上移動(dòng)

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

3、一個(gè)或多個(gè)手指離開屏幕

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

4终畅、觸摸序列被諸如電話呼入這樣的系統(tǒng)事件取消

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

三籍胯、UITouch觸摸對象

當(dāng)用戶觸摸屏幕時(shí),事件會(huì)被封裝成一個(gè)event實(shí)例声离,包含了用戶觸摸的相關(guān)信息芒炼,event實(shí)例中包含著若干個(gè)UITouch實(shí)例,一個(gè)touch代表著用戶的一個(gè)手指

1术徊、UITouch常用屬性

1)window

觸摸產(chǎn)生時(shí)所處的窗口

2)view

觸摸產(chǎn)生時(shí)所處的試圖

3)tapCount

tap(輕擊)操作本刽,和鼠標(biāo)單獨(dú)單擊操作類似,tapCount表示短時(shí)間內(nèi)輕擊屏幕的次數(shù)赠涮,因此可以根據(jù)tapCount判斷單擊子寓、雙擊或更多的輕擊

雙擊試圖是時(shí)單擊也會(huì)執(zhí)行的解決方法

if (touch.tapCount == 1) {

//延遲0.5秒執(zhí)行 runLoop會(huì)計(jì)算這個(gè)時(shí)間

[self performSelector:@selector(singleTap) withObject:nil afterDelay:0.5];

}else{

//告訴runLoop取消調(diào)用某個(gè)延遲的方法

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap) object:nil];

[self doubleTap];

}

4)timestamp

記錄了觸摸事件產(chǎn)生或變化時(shí)的時(shí)間,單位是秒

5)phase

觸摸事件在屏幕上有一個(gè)周期笋除,即觸摸開始斜友、觸摸點(diǎn)移動(dòng)、觸摸點(diǎn)結(jié)束垃它,還有中途取消鲜屏,通過phase可以查看當(dāng)前觸摸事件在一個(gè)周期中所處的狀態(tài),pase是一個(gè)枚舉,包含:

//觸摸開始

UITouchPhaseBegan

//接觸點(diǎn)移動(dòng)

UITouchPhaseMoved

//接觸點(diǎn)無移動(dòng)

UITouchPhaseStationary

//觸摸結(jié)束

UITouchPhaseEnded

//觸摸取消

UITouchPhaseCancelled

2国拇、UITouch常用方法

1)返回一個(gè)CGPoint類型的值洛史,表示觸摸在view這個(gè)視圖上的位置,這里返回的位置是針對view的坐標(biāo)系的

- (CGPoint)locationInView:(UIView *)view

2)該方法記錄了前一個(gè)坐標(biāo)值

- (CGPoint)previousLocationInView:(UIView *)view:

一酱吝、事件傳遞

1也殖、從事件發(fā)生到其處理的對象,傳遞要經(jīng)過特殊的一段過程务热,當(dāng)用戶點(diǎn)擊設(shè)備屏幕時(shí)忆嗜,iOS捕捉到一系列的觸摸己儒,將其打包到UIEvent對象并放置到應(yīng)用程序活動(dòng)事件隊(duì)列中

2、UIApplication對象從事件隊(duì)列中取出最前面的事件并將其分發(fā)捆毫,通常闪湾,其將事件發(fā)送給應(yīng)用程序的主窗口-UIWindow實(shí)例,再由窗口對象發(fā)送事件給第一響應(yīng)者處理冻璃,一般通過touchesBegan方法獲取該事件

3响谓、具體過程

1)先將事件對象由上往下傳遞(由父控件傳遞給子控件),找到最合適的控件來處理這個(gè)事件

2)調(diào)用最合適控件的touches方法

3)如果調(diào)用了[super touches...]方法省艳,就會(huì)將事件順著響應(yīng)者鏈條往上傳遞,傳遞給上一個(gè)響應(yīng)者

4)接著就會(huì)調(diào)用上一個(gè)響應(yīng)者的touches...方法

二嫁审、響應(yīng)者鏈

1跋炕、基本概念

響應(yīng)者對象是一個(gè)能接受并處理事件的對象,UIResponser是所有響應(yīng)者對象的基類律适,該基類定義了一系列編程接口辐烂,不但為事件處理進(jìn)行服務(wù)而且還提供了通用的響應(yīng)行為處理,UIApplication捂贿、UIView(UIWindow)纠修、UIViewController都直接或間接的繼承自UIResponser,所有的這些類的實(shí)例都是響應(yīng)者對象

響應(yīng)者鏈表示一系列的響應(yīng)者對象,事件被交由第一響應(yīng)者對象處理厂僧,如果第一響應(yīng)者不處理扣草,事件被沿著響應(yīng)者鏈向上傳遞,交給下一個(gè)響應(yīng)者(nextresponder)

2颜屠、事件響應(yīng)者鏈傳遞的過程

1辰妙、當(dāng)用戶與試圖交互時(shí),會(huì)將消息傳遞給試圖控制器甫窟,如果不存在控制器密浑,傳遞給父試圖

2、如果不處理該消息粗井,則繼續(xù)將消息向上傳遞尔破,如果最上層的試圖也不處理,將事件交給window對象浇衬,最后交由UIApplication實(shí)例懒构,如果不處理,丟棄事件

PS:傳遞方式

[self.nextResponder touchesBegan:touches withEvent:event];

3径玖、通過響應(yīng)者鏈傳遞可以讓多個(gè)試圖響應(yīng)同一個(gè)手勢

三痴脾、練習(xí)

事件的傳遞演示

四、手勢識(shí)別器

UIGestureRecognizer類梳星,用于檢測赞赖、識(shí)別用戶使用設(shè)備時(shí)所用的手勢滚朵,他是一個(gè)抽象類,定義了所有手勢的基本行為前域,以下是UIGestureRecognizer子類辕近,用與處理具體的用戶手勢行為

1、輕擊

UITapGestureRecognizer

常用屬性

//點(diǎn)擊次數(shù)

numberOfTapsRequired

//消除兩個(gè)手勢的影響

requireGestureRecognizerToFail

//手指的數(shù)量匿垄,需將試圖的multipleTouchEnabled設(shè)為YES

numberOfTouchesRequired

2移宅、輕掃

UISwipeGestureRecognizer

常用屬性

清掃方向,默認(rèn)是右

direction

3椿疗、長按

UILongPressGestureRecognizer

常用屬性

最小長按時(shí)間

minimumPressDuration

注意事項(xiàng)

如果不判斷會(huì)調(diào)用2次 按下2秒后自己調(diào)用一次 松開后又要調(diào)用一次

if (longPress.state == UIGestureRecognizerStateEnded) {

return;

}

NSLog(@"長按");

4漏峰、平移

UIPanGestureRecognizer

常用方法

獲取觸摸的位置

locationInView

注意事項(xiàng)

- (void)panAction:(UIPanGestureRecognizer *)gesture{

// 1.在view上面挪動(dòng)的距離 //translationInView表示相對于起點(diǎn)挪動(dòng)的位置是最新2點(diǎn)之間的間距

CGPoint translation = [gesture translationInView:gesture.view];

CGPoint center = gesture.view.center;

center.x += translation.x;

center.y += translation.y;

gesture.view.center = center;

// 2.清空移動(dòng)的距離

[gesture setTranslation:CGPointZero inView:gesture.view];

}

5、捏合

UIPinchGestureRecognizer

注意事項(xiàng):

每次調(diào)用過方法后届榄,記得將scale置1浅乔,否則你的圖片在捏合一點(diǎn)便會(huì)變很大或很小

6、旋轉(zhuǎn)

UIRotationGestureRecognizer

注意事項(xiàng):

每次調(diào)用過方法后铝条,記得將rotation置0靖苇,否則圖片旋轉(zhuǎn)不正常

7、手勢識(shí)別器的代理方法

/**

*? 是否允許多個(gè)手勢識(shí)別器同時(shí)有效

*? Simultaneously : 同時(shí)地

*/

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{

return YES;

}

8班缰、重要的事情說三遍

實(shí)現(xiàn)旋轉(zhuǎn)贤壁、縮放、平移的時(shí)候一定要清零

實(shí)現(xiàn)旋轉(zhuǎn)埠忘、縮放脾拆、平移的時(shí)候一定要清零

實(shí)現(xiàn)旋轉(zhuǎn)、縮放给梅、平移的時(shí)候一定要清零


(8)

一假丧、滑動(dòng)試圖(UIScrollView)

1、基本概念

1) 移動(dòng)設(shè)備的屏幕大小是極其有限的动羽,因此直接展示在用戶眼前的內(nèi)容也相當(dāng)有限,當(dāng)展示的內(nèi)容較多包帚,超出一個(gè)屏幕時(shí),用戶可通過滾動(dòng)手勢來查看屏幕以外的內(nèi)容

2) 通過scrollView可以通過手勢,放大或者縮小顯示的內(nèi)容

2、UIScrollView常用屬性

1)里面內(nèi)容的大小契讲,也就是可以滾動(dòng)的大小身诺,模式是0剑按,沒有滾動(dòng)效果

contentSize

2)這個(gè)屬性能夠在UIScrollView的4周增加額外的滾動(dòng)區(qū)域

contentInset

3) 這個(gè)屬性用來表示UIScrollView滾動(dòng)的位置

contentOffset

4) 默認(rèn)是 yes,就是滾動(dòng)超過邊界會(huì)反彈有反彈回來的效果。假如是 NO,那么滾動(dòng)到達(dá)邊界會(huì)立刻停止

bounces

5) 是否分頁

pagingEnabled

6) 是否可以滾動(dòng)

scrollEnabled

7) 滾動(dòng)時(shí)是否顯示水平滾動(dòng)條

showsHorizontalScrollIndicator

8) 滾動(dòng)時(shí)是否顯示垂直滾動(dòng)條

showsVerticalScrollIndicator

9) 滾動(dòng)條的樣式瓮床,基本只是設(shè)置顏色。總共3個(gè)顏色:默認(rèn)隘庄、黑踢步、白

indicatorStyle

10) 默認(rèn)是 NO,可以在垂直和水平方向同時(shí)運(yùn)動(dòng)丑掺。當(dāng)值是 YES 時(shí)获印,假如一開始是垂直或者是水平運(yùn)動(dòng),那么接下來會(huì)鎖定另外一個(gè)方向的滾動(dòng)街州。 假如一開始是對角方向滾動(dòng)兼丰,則不會(huì)禁止某個(gè)方向

directionalLockEnabled

10) 讓指定的區(qū)域顯示顯示出來

scrollRectToVisible:animate

10)當(dāng)touch后還沒有拖動(dòng)的時(shí)候值是YES,否則是NO

tracking

11) 當(dāng)內(nèi)容放大到最大或者最小的時(shí)候是YES唆缴,否則NO

zoomBouncing

12) 當(dāng)正在縮放的時(shí)候值是YES鳍征,否則為NO

zooming

13) 當(dāng)滾動(dòng)后,手指放開但是還在繼續(xù)滾動(dòng)中面徽。這個(gè)時(shí)候是 YES蟆技,其它時(shí)候是 NO

decelerating

14) 設(shè)置手指放開后的減速率

decelerationRate

15) 一個(gè)浮點(diǎn)數(shù),表示能放最大的倍數(shù)

maximumZoomScale

16) 一個(gè)浮點(diǎn)數(shù)斗忌,表示能縮最小的倍數(shù)

minimumZoomScale

17) 和 bounces 類似,區(qū)別在于:這個(gè)效果反映在縮放上面,假如縮放超過最大縮放旺聚,那么會(huì)反彈效果织阳;假如是 NO,則到達(dá)最大或者最小的時(shí)候立即停止

bouncesZoom

3砰粹、UIScrollView代理方法

創(chuàng)建一個(gè)UIScrollView唧躲,并在里面放置一張圖片

1)scrollView已經(jīng)滑動(dòng)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

2)視圖已經(jīng)放大或縮小

- (void)scrollViewDidZoom:(UIScrollView *)scrollView;

3)scrollView開始拖動(dòng)

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

4)scrollView結(jié)束拖動(dòng)

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

5)scrollView開始減速(以下兩個(gè)方法注意與以上兩個(gè)方法加以區(qū)別)

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

6)scrollview減速停止

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

用法:

if (![scrollView isMemberOfClass:[UITableView class]]) {

int current = scrollView.contentOffset.x / 320;

UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:101];

pageControl.currentPage = current;

}

7)返回一個(gè)放大或者縮小的視圖碱璃,要設(shè)置最大最小值

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

8)開始放大或者縮小

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view

9)縮放結(jié)束時(shí)

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale;

10)是否支持滑動(dòng)至頂部

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;

11)滑動(dòng)到頂部時(shí)調(diào)用該方法

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;

一弄痹、利用scrollView實(shí)現(xiàn)圖片的放大縮小

1、設(shè)置最大最小縮放倍率

self.maximumZoomScale = 2.5;

self.minimumZoomScale = 1;

2嵌器、指定縮放誰

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

3肛真、雙擊事件的放大與縮小

- (void)zoomInOrOut:(UITapGestureRecognizer *)tapGesture

{

if (self.zoomScale >= 2.5) {

[self setZoomScale:1 animated:YES];

}else {

CGPoint point = [tapGesture locationInView:self];

[self zoomToRect:CGRectMake(point.x - 40, point.y - 40, 80, 80) animated:YES];

}

}

二、實(shí)現(xiàn)類似相冊的功能

1爽航、創(chuàng)建一個(gè)scrollView蚓让,進(jìn)行配置

2、在scrollView里面放多張能夠顯示得圖片

3讥珍、每次翻到下一張圖片時(shí)要讓這上個(gè)圖片恢復(fù)到原比例

int pre = 0;

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

int current = scrollView.contentOffset.x / 340;

ImageScrollView *imgScrollView = (ImageScrollView *)[scrollView viewWithTag:pre];

if (imgScrollView.zoomScale > 1) {

imgScrollView.zoomScale = 1;

}

pre = current;

}


(9)

一历极、UIPickerView(拾取器)的使用? 1、UIPickerView控件生成的表格可以提供滾動(dòng)的輪盤衷佃,? 2趟卸、這些表格表面上類似于標(biāo)準(zhǔn)的UITableView控件,但是他們使用的dataSource和delegate方法有細(xì)微的差別二、UIPickerView常用方法? ? ? 1锄列、獲取指定列的行數(shù)? ? - (NSInteger)numberOfRowsInComponent:(NSInteger)component;? 2图云、刷新所有列? ? - (void)reloadAllComponents;? 3、刷新指定的列? ? - (void)reloadComponent:(NSInteger)component;? 4右蕊、選擇一行? ? - (void)selectRow:(NSInteger)row inComponent:(NSInteger component? ? animated:(BOOL)animated;? 5琼稻、獲取指定列當(dāng)前顯示的是第幾行? ? - (NSInteger)selectedRowInComponent:(NSInteger)component;三、UIPickerView常用方法? ? 1饶囚、dataSource方法? ? ? 1)返回列數(shù)? ? ? ? - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView? ? ? 2)返回每一列對應(yīng)的行數(shù)? ? ? ? - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component? ? 2帕翻、delegate方法? ? ? ? 1)返回顯示的文本? ? ? ? - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component? ? ? ? 2)當(dāng)某一列選中的行數(shù)發(fā)生變化時(shí)調(diào)用? ? ? ? ? - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component? ? ? ? 3) 設(shè)置行高? ? ? ? - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component? ? ? ? 4)設(shè)置列寬? ? ? ? - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component? ? ? ? 5)自定義cell? ? ? ? - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view四、練習(xí)? ? 1萝风、使用拾取器做城市選擇? ? ? 1)在工程自帶的ViewController的viewDidload加入? ? ? ? UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0,self.view.frame.size.height-300, 414, 300)];? ? ? ? pickerView.backgroundColor = [UIColor grayColor];? ? ? ? ? ? [self.view addSubview:pickerView];? ? ? 運(yùn)行嘀掸,什么都沒有,因?yàn)槎嗌俣味嗌傩惺峭ㄟ^代理方法來設(shè)置的? ? ? 2)讓viewController類遵守兩個(gè)協(xié)議规惰,在viewDidLoad方法里給pickerView掛上代理睬塌,并在viewController里實(shí)現(xiàn)如下兩個(gè)代理方法

//返回列數(shù)

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

return 2;

}

//返回每一列中的行數(shù)

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

return 5;

}

運(yùn)行 選擇器里面有兩列,每列的數(shù)據(jù)都是用『歇万?』表示揩晴,因?yàn)檫€沒有給每列賦值

3)將課件里面的city.plist文件拖到工程中,在viewDidLoad方法里寫入如下代碼

NSString *path = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist"];

//聲明一個(gè)全局變量dataArray

dataArray = [[NSArray alloc] initWithContentsOfFile:path];

4)將代理方法- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component的內(nèi)容替換成如下內(nèi)容

if (component == 0) {

return data.count;

}

NSInteger selectedRow =? [pickerView selectedRowInComponent:component];

NSArray *tempArray = data[selectedRow][@"cities"];

return tempArray.count;

運(yùn)行 目前還是沒有數(shù)據(jù)贪磺,但列數(shù)和行數(shù)已經(jīng)做了自動(dòng)設(shè)置

5硫兰、給每行設(shè)置標(biāo)題,將如下代理方法寫入工程

//返回每個(gè)item中的title

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

if (component == 0) {//第一列

NSDictionary *dic = data[row];

NSString *state = dic[@"state"];

return state;

}

//返回第一列選擇的行的索引

NSInteger selectedRow = [pickerView selectedRowInComponent:0];

//取得省級(jí)字典

NSDictionary *items = data[selectedRow];

//取得該省下所有的市

NSArray *cities = [items objectForKey:@"cities"];

NSString *cityName = cities[row];

return cityName;

}

運(yùn)行 每行有標(biāo)題 但左邊的省份變化寒锚,右邊的城市列表沒有跟著變化

6劫映、實(shí)現(xiàn)右側(cè)跟著左側(cè)聯(lián)動(dòng)

//當(dāng)某一列選中的行數(shù)發(fā)生變化時(shí)調(diào)用

- (void)pickerView:(UIPickerView *)pickerView

didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

if (component == 0) {

//刷新指定列中的行

[pickerView reloadComponent:1];

//選擇指定的item

[pickerView selectRow:0 inComponent:1 animated:YES];

}

}

運(yùn)行 右側(cè)可以跟著左側(cè)聯(lián)動(dòng)

7、設(shè)置列寬和行高刹前,在工程里添加如下代理方法

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {

if (component == 0) {

return 100;

}

return 220;

}

- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{

return 30;

}

8泳赋、自定義cell,添加代理方法

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

if (component == 0) {

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

view.backgroundColor = [UIColor greenColor];

return view;

}

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 220, 40)];

view2.backgroundColor = [UIColor redColor];

return view2;

}

運(yùn)行 只剩色塊,而里面卻沒有內(nèi)容了喇喉,因?yàn)檫@個(gè)代理方法執(zhí)行- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component代理方法將不會(huì)再執(zhí)行

一祖今、UIDatePicker時(shí)間拾取器

1、UIDatePicker提供了時(shí)間轧飞、日期供用戶選擇

2衅鹿、UIDataPicker是對UIPickerView做了進(jìn)一步封裝,其外觀布局和UIPickerView完全一樣

二过咬、UIDatePicker的常用屬性

1大渤、初始化顯示的date日期

date

2、設(shè)置最小日期

minimumDate

3掸绞、設(shè)置最大日期

maximumDate

4泵三、設(shè)置日期的顯示樣式

datePickerMode

UIDatePickerModeTime 顯示時(shí)間

UIDatePickerModeDate 顯示日期

UIDatePickerModeDateAndTime 顯示日期和時(shí)間

UIDatePickerModeCountDownTimer 顯示時(shí)間

5耕捞、分鐘間隔值

minuteInterval

三、練習(xí)

1烫幕、日期選擇器

1) 新建工程俺抽,在ViewController中的viewDidLoad加入如下代碼

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 736-300, 414, 300)];

datePicker.tag = 100;

//最小時(shí)間? 10年之前 不設(shè)置最小時(shí)間將沒有限定

datePicker.minimumDate = [NSDate dateWithTimeIntervalSinceNow:-60*60*24*365*10];

datePicker.maximumDate = [NSDate date];

//初始化時(shí)間為昨天

datePicker.date = [NSDate dateWithTimeIntervalSinceNow:-60*60*24];

//4種顯示樣式

datePicker.datePickerMode = UIDatePickerModeDate;

[self.view addSubview:datePicker];

運(yùn)行 體驗(yàn)一下設(shè)置最小時(shí)間跟沒設(shè)置最小時(shí)間的區(qū)別

2)在viewDidLoad中添加如下代碼

UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];

button.frame = CGRectMake(100, 100, 50, 50);

[button addTarget:self action:@selector(clickActon) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:button];

3)實(shí)現(xiàn)點(diǎn)擊事件方法

- (void)clickActon{

UIDatePicker *datePicker = (UIDatePicker *)[self.view viewWithTag:100];

NSDate *date = datePicker.date;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSString *dateString = [dateFormatter stringFromDate:date];

NSLog(@"%@",dateString);

}

運(yùn)行,查看效果

一较曼、日期類簡單介紹

對日期我們經(jīng)常使用到的兩個(gè)類

1磷斧、NSDate,NSDate的對象表示一個(gè)具體的時(shí)間點(diǎn)

2、NSDateFormatter對象將時(shí)間轉(zhuǎn)化為字符串或者反轉(zhuǎn)

二捷犹、創(chuàng)建NSDate對象的幾種方式以及區(qū)別

1弛饭、獲取到GTM時(shí)間(世界標(biāo)準(zhǔn)時(shí)間),比中國時(shí)間早八個(gè)小時(shí)

NSDate *data = [NSDate date];

2萍歉、從當(dāng)前GTM時(shí)間往后推八個(gè)小時(shí)的時(shí)間侣颂,如果為負(fù)數(shù)就是往前推八個(gè)小時(shí)的時(shí)間

NSTimeInterval timeInterval = 8*60*60;

NSDate *chinaDate = [NSDate dateWithTimeIntervalSinceNow:timeInterval];

3、從計(jì)算機(jī)時(shí)間(1970-01-01 00:00:00)后推八個(gè)小時(shí)后的時(shí)間枪孩。

NSDate *since1970Date = [NSDate dateWithTimeIntervalSince1970:timeInterval];

4憔晒、從自定義的時(shí)間往后推八個(gè)小時(shí)后的時(shí)間。

NSDate *sinceCustomDate = [NSDate dateWithTimeInterval:timeInterval sinceDate:date];

5蔑舞、從2001-01-01 00:00:00往后推八個(gè)小時(shí)后的時(shí)間拒担。

NSDate *sinceReferenceDate = [NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval];

6、永遠(yuǎn)不可能到達(dá)的一個(gè)點(diǎn)

NSDate *futureDate = [NSDate distantFuture];

7攻询、一個(gè)無限過去的時(shí)間點(diǎn)

NSDate *pastDate = [NSDate distantPast];

三澎蛛、NSDate對象常用的方法

1、從計(jì)算機(jī)時(shí)間(1970-01-01 00:00:00)到date時(shí)間的時(shí)間差(秒為單位)

timeIntervalSince1970

2蜕窿、從(2001-01-01 00:00:00)到date時(shí)間的時(shí)間差(秒為單位)

timeIntervalSinceReferenceDate

3、從當(dāng)前時(shí)間到date時(shí)間的時(shí)間差

timeIntervalSinceNow

4呆馁、當(dāng)前時(shí)間偏移多少秒后的新時(shí)間

dateByAddingTimeInterval

5桐经、兩個(gè)日期之間的時(shí)間差

timeIntervalSinceDate

6、日期的比較

earlierDate//誰早返回誰

laterDate//誰晚返回誰

isEqualToDate//兩個(gè)日期是否相等

四浙滤、日期與字符串的轉(zhuǎn)換

1阴挣、日期格式如下:

y? 年

F? 月份中的周數(shù)

E? 周幾,EEEE星期幾

M 表示 月

m 表示 分

H 表示 24小時(shí)制

h 表示 12小時(shí)制

s 表示 秒

S 表示 毫秒

d? 月份中的天數(shù)

a? Am/pm

k? 一天中的小時(shí)數(shù)(1-24)

K? am/pm 中的小時(shí)數(shù)(0-11)

H? 一天中的小時(shí)數(shù)

h? am/pm 中的小時(shí)數(shù)(1-12)

2、字符串與日期的轉(zhuǎn)換

1)將日期轉(zhuǎn)換為字符串纺腊,轉(zhuǎn)換過后就自動(dòng)換成系統(tǒng)所在時(shí)區(qū)的時(shí)間

[dateFormatter stringFromDate:date]

2)將字符串轉(zhuǎn)化為日期

[dateFormatter dateFromString:str]

--------------------------------------------------------------------

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 未完(接UI控件及方法大集合續(xù))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畔咧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子揖膜,更是在濱河造成了極大的恐慌誓沸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹粟,死亡現(xiàn)場離奇詭異拜隧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門洪添,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垦页,“玉大人,你說我怎么就攤上這事干奢∪福” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵忿峻,是天一觀的道長薄啥。 經(jīng)常有香客問我,道長炭菌,這世上最難降的妖魔是什么罪佳? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮黑低,結(jié)果婚禮上赘艳,老公的妹妹穿的比我還像新娘。我一直安慰自己克握,他們只是感情好蕾管,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菩暗,像睡著了一般掰曾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上停团,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天旷坦,我揣著相機(jī)與錄音,去河邊找鬼佑稠。 笑死秒梅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舌胶。 我是一名探鬼主播捆蜀,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼幔嫂!你這毒婦竟也來了辆它?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對情侶失蹤履恩,失蹤者是張志新(化名)和其女友劉穎锰茉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體切心,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洞辣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年咐刨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扬霜。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡定鸟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出著瓶,到底是詐尸還是另有隱情联予,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布材原,位于F島的核電站沸久,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏余蟹。R本人自食惡果不足惜卷胯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望威酒。 院中可真熱鬧窑睁,春花似錦、人聲如沸葵孤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尤仍。三九已至箫津,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宰啦,已是汗流浹背苏遥。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赡模,地道東北人暖眼。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像纺裁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子司澎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容