uitableview自定義單元格和性能優(yōu)化高級(jí)_第1頁(yè)
uitableview自定義單元格和性能優(yōu)化高級(jí)_第2頁(yè)
uitableview自定義單元格和性能優(yōu)化高級(jí)_第3頁(yè)
uitableview自定義單元格和性能優(yōu)化高級(jí)_第4頁(yè)
uitableview自定義單元格和性能優(yōu)化高級(jí)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

UITableView講師:劉凡技術(shù)博客:新浪微博:UITableView實(shí)例——以垂直滾動(dòng)方式顯示數(shù)據(jù)列表UITableView實(shí)例——不同類型的UITableViewCellUITableView的兩種內(nèi)置樣式UITableViewStylePlainUITableViewStyleGrouped數(shù)據(jù)源(dataSource)和代理(delegate)UITableView需要一個(gè)數(shù)據(jù)源(dataSource)來(lái)顯示數(shù)據(jù),UITableView會(huì)向數(shù)據(jù)源查詢一共有多少行數(shù)據(jù)以及每一行顯示什么數(shù)據(jù)等。沒(méi)有設(shè)置數(shù)據(jù)源的UITableView只是個(gè)空殼。凡是遵守UITableViewDataSource協(xié)議的OC對(duì)象,都可以是UITableView的數(shù)據(jù)源通常都要為UITableView設(shè)置代理對(duì)象(delegate),以便在UITableView觸發(fā)一下事件時(shí)做出相應(yīng)的處理,比如選中了某一行。凡是遵守了UITableViewDelegate協(xié)議的OC對(duì)象,都可以是UITableView的代理對(duì)象通常情況下,會(huì)讓控制器充當(dāng)UITableView的dataSource和delegateUITableView的數(shù)據(jù)源協(xié)議示意圖id<UITableViewDataSource>

dataSourceUITableViewUITableViewDataSource協(xié)議//一共有多少組數(shù)據(jù)-(NSInteger)numberOfSectionsInTableView://每一組有多少行數(shù)據(jù)-(NSInteger)tableView:numberOfRowsInSection://每一行具體顯示的內(nèi)容-(UITableViewCell*)tableView:cellForRowAtIndexPath:dataSource對(duì)象(遵從協(xié)議,實(shí)現(xiàn)方法)UITableView的代理協(xié)議示意圖id<UITableViewDelegate>

delegateUITableViewUITableViewDelegate協(xié)議//選中了某一行(void)tableView:didSelectRowAtIndexPath://每一行有多高-(CGFloat)tableView:heightForRowAtIndexPath:delegate對(duì)象(遵從協(xié)議,實(shí)現(xiàn)方法)UITableView分組數(shù)據(jù)演練1——使用代碼分組UITableView分組數(shù)據(jù)演練2——城市信息UITableViewCellUITableView的每一行都是一個(gè)UITableViewCell,通過(guò)dataSource的tableView:cellForRowAtIndexPath:方法來(lái)初始化每一行UITableViewCell是UIView的子類,內(nèi)部有個(gè)默認(rèn)的子視圖:contentView。contentView是UITableViewCell顯示內(nèi)容的父視圖,并負(fù)責(zé)顯示一些輔助指示視圖。輔助指示視圖的作用是顯示一個(gè)表示動(dòng)作的圖標(biāo),可以通過(guò)設(shè)置UITableViewCell的accessoryType來(lái)顯示,默認(rèn)是UITableViewCellAccessoryNone,即不顯示輔助指示視圖

,其他值如下:UITableViewCellAccessoryDisclosureIndicatorUITableViewCellAccessoryDetailDisclosureButtonUITableViewCellAccessoryCheckmarkUITableViewCell——contentViewcontentView下默認(rèn)有3個(gè)子視圖,其中的2個(gè)是UILabel,通過(guò)textLabel和detailTextLabel屬性訪問(wèn),第3個(gè)是UIImageView,通過(guò)imageView屬性訪問(wèn)UITableViewCell的UITableViewCellStyle,用于決定使用contentView的哪些子視圖,以及這些子視圖在contentView中的位置,對(duì)應(yīng)樣式如下UITableViewCellStyleDefaultUITableViewCellStyleValue1UITableViewCellStyleSubtitleUITableViewCellStyleValue2UITableView演練3——商品列表UITableView演練4——更新商品列表MVC體系結(jié)構(gòu)示意圖MVC體系結(jié)構(gòu)是大多數(shù)iPhone應(yīng)用的基本體系結(jié)構(gòu),由三部分組成:控制器Controller模型Model視圖View包含數(shù)據(jù)及數(shù)據(jù)處理方法顯示模型數(shù)據(jù)中的內(nèi)容告訴視圖顯示哪些模型內(nèi)容告訴模型如何基于用戶在視圖上的操作做出變化UITableViewCell對(duì)象的重用原理iOS設(shè)備的內(nèi)存有限,如果用UITableView顯示成千上萬(wàn)條數(shù)據(jù),就需要成千上萬(wàn)個(gè)UITableViewCell對(duì)象的話,那將會(huì)耗盡iOS設(shè)備的內(nèi)存。要解決該問(wèn)題,需要重用UITableViewCell對(duì)象重用原理:當(dāng)滾動(dòng)列表時(shí),部分UITableViewCell會(huì)移出窗口,UITableView會(huì)將窗口外的UITableViewCell放入一個(gè)對(duì)象池中,等待重用。當(dāng)UITableView要求dataSource返回UITableViewCell時(shí),dataSource會(huì)先查看這個(gè)對(duì)象池,如果池中有未使用的UITableViewCell,dataSource會(huì)用新的數(shù)據(jù)配置這個(gè)UITableViewCell,然后返回給UITableView,重新顯示到窗口中,從而避免創(chuàng)建新對(duì)象UITableViewCell對(duì)象的重用示意圖Itcast-0Itcast-1Itcast-2緩存池UITableViewCell對(duì)象的重用原理還有一個(gè)非常重要的問(wèn)題:有時(shí)候需要自定義UITableViewCell(用一個(gè)子類繼承UITableViewCell),而且每一行用的不一定是同一種UITableViewCell(如短信聊天布局),所以一個(gè)UITableView可能擁有不同類型的UITableViewCell,對(duì)象池中也會(huì)有很多不同類型的UITableViewCell,那么UITableView在重用UITableViewCell時(shí)可能會(huì)得到錯(cuò)誤類型的UITableViewCell解決方案:UITableViewCell有個(gè)NSString*reuseIdentifier屬性,可以在初始化UITableViewCell的時(shí)候傳入一個(gè)特定的字符串標(biāo)識(shí)來(lái)設(shè)置reuseIdentifier(一般用UITableViewCell的類名)。當(dāng)UITableView要求dataSource返回UITableViewCell時(shí),先通過(guò)一個(gè)字符串標(biāo)識(shí)到對(duì)象池中查找對(duì)應(yīng)類型的UITableViewCell對(duì)象,如果有,就重用,如果沒(méi)有,就傳入這個(gè)字符串標(biāo)識(shí)來(lái)初始化一個(gè)UITableViewCell對(duì)象UITableViewCell對(duì)象的重用示意圖緩存池HerCellMyCellHerCell她

我她她她她

我HerCell關(guān)于UITableView性能優(yōu)化使用的提示創(chuàng)建UITableViewCell時(shí),必須設(shè)置一個(gè)唯一標(biāo)示去緩存池取出UITableViewCell時(shí),必須傳入一個(gè)標(biāo)示UITableView的編輯模式UITableView有個(gè)editing屬性,當(dāng)設(shè)置為YES時(shí),可以進(jìn)入編輯模式。在編輯模式下,可以管理表格中的行,比如改變行的排列順序、增加行、刪除行,但不能修改行的內(nèi)容開(kāi)啟編輯模式的方法:@property(nonatomic,getter=isEditing)BOOLediting;-(void)setEditing:(BOOL)editinganimated:(BOOL)animated;拖住進(jìn)行排序點(diǎn)擊進(jìn)行刪除在UITableView中刪除或添加行1.開(kāi)啟表格的編輯模式2.實(shí)現(xiàn)UITableViewDataSource的方法:-(void)mitEditingStyle:forRowAtIndexPath:3.實(shí)現(xiàn)UITableViewDelegate的方法:-(UITableViewCellEditingStyle)tableView:editingStyleForRowAtIndexPath:注意:如果不實(shí)現(xiàn)該方法,默認(rèn)將編輯模式視為刪除在UITableView中刪除或添加行的代碼實(shí)現(xiàn)//判斷當(dāng)前的編輯模式if(editingStyle==UITableViewCellEditingStyleDelete){

//1.刪除真實(shí)數(shù)據(jù)[_dataList

removeObjectAtIndex:indexPath.row];

NSLog(@"%@",_dataList);

//2.更新表格數(shù)據(jù)[tableViewdeleteRowsAtIndexPaths:@[indexPath]

withRowAnimation:UITableViewRowAnimationRight];}else{

//1.添加真實(shí)數(shù)據(jù)[_dataList

insertObject:@"新建數(shù)據(jù)..."atIndex:indexPath.row+1];

NSLog(@"%@",_dataList);

//2.刷新表格數(shù)據(jù)

NSIndexPath*path=[NSIndexPath

indexPathForRow:indexPath.row+1

inSection:indexPath.section];[tableViewinsertRowsAtIndexPaths:@[path]

withRowAnimation:UITableViewRowAnimationTop];}移動(dòng)UITableView的行1.開(kāi)啟表格的編輯模式2.實(shí)現(xiàn)UITableViewDataSource的方法:-(void)tableView:moveRowAtIndexPath:toIndexPath:注意:只要實(shí)現(xiàn)了該方法,即可實(shí)現(xiàn)表格移動(dòng)四種刷新表格數(shù)據(jù)的方法//新增表格數(shù)據(jù)[tableViewinsertRowsAtIndexPaths:@[path]

withRowAnimation:UITableViewRowAnimationTop];//刪除表格數(shù)據(jù)[tableViewdeleteRowsAtIndexPaths:@[path]

withRowAnimation:UITableViewRowAnimationRight];//局部刷新指定的行[tableView

reloadRowsAtIndexPaths:@[path]

withRowAnimation:UITableViewRowAnimationMiddle];//刷新全部表格數(shù)據(jù)[tableViewreloadData];UITableView編輯模式演練UITabelView常用屬性分隔線屬性separatorStyle分隔線樣式separatorColor

分隔線顏色選中屬性allowsSelection

允許選中allowsMultipleSelection

允許多選行數(shù)indexPathsForSelectedRows

當(dāng)前選中行數(shù)indexPathsForVisibleRows

當(dāng)前可見(jiàn)行數(shù)背景backgroundView 背景視圖selectedBackgroundView

選中時(shí)的背景視圖另外,UITableViewCell的selectionStyle屬性可設(shè)置被選中時(shí)的背景顏色:UITableViewCellSelectionStyleNone

沒(méi)有顏色UITableViewCellSelectionStyleBlue

藍(lán)色(默認(rèn))UITableViewCellSelectionStyleGray

灰色自定義UITableViewCell有三種方式自定義單元格:StoryboardXIB代碼注意:通過(guò)XIB或者Storyboard自定義單元格時(shí),需要指定單元格的可重用標(biāo)示符如果使用XIB方式,需要在viewDidload方法中,注冊(cè)XIB文件UINib*nib=[UINib

nibWithNibName:@”bookCell"

bundle:[NSBundle

mainBundle]];[self.tableView

registerNib:nibforCellReuseIdentifier:@”cell"];UITableViewCellcontentViewButton自定義表格行演練(1)——使用tag自定義表格行注意:在按鈕點(diǎn)擊的監(jiān)聽(tīng)事件中UITableViewCell的獲取方法button.superview.superview通過(guò)按鈕點(diǎn)擊事件獲取在xib中,不能直

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論