国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

11-UITableView

2019-11-14 19:28:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

UITableView

掌握

  • 設(shè)置UITableView的dataSource、delegate
  • UITableView多組數(shù)據(jù)和單組數(shù)據(jù)的展示
  • UITableViewCell的常見(jiàn)屬性
  • UITableView的性能優(yōu)化(cell的循環(huán)利用)
  • 自定義Cell

作業(yè)

  • 使用素材car_simple.plist來(lái)展示汽車品牌數(shù)據(jù)

什么是UITableView

  • 在眾多移動(dòng)應(yīng)用中,能看到各式各樣的表格數(shù)據(jù)
  • 在iOS中,要實(shí)現(xiàn)表格數(shù)據(jù)展示,最常用的做法就是使用UITableView

  • UITableView繼承自UIScrollView,因此支持垂直滾動(dòng),而且性能極佳

UITableView的兩種樣式

如何展示數(shù)據(jù)

  • 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ù)源

tableView和數(shù)據(jù)源

tableView展示數(shù)據(jù)的過(guò)程

  1. 調(diào)用數(shù)據(jù)源的下面方法得知一共有多少組數(shù)據(jù)

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

  1. 調(diào)用數(shù)據(jù)源的下面方法得知每一組有多少行數(shù)據(jù)

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

  1. 調(diào)用數(shù)據(jù)源的下面方法得知每一行顯示什么內(nèi)容

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

字典轉(zhuǎn)模型

初始MVC

  • MVC是一種設(shè)計(jì)思想,貫穿于整個(gè)iOS開(kāi)發(fā)中,需要積累一定的項(xiàng)目經(jīng)驗(yàn),才能深刻體會(huì)其中的含義和好處
  • MVC中的三個(gè)角色
  1. M:Model,模型數(shù)據(jù)
  2. V:View,視圖(界面)
  3. C:Control,控制中心
  • MVC的幾個(gè)明顯的特征和體現(xiàn):
  1. View上面顯示什么東西,取決于Model
  2. 只要Model數(shù)據(jù)改了,View的顯示狀態(tài)會(huì)跟著更改
  3. Control負(fù)責(zé)初始化Model,并將Model傳遞給View去解析展示

Cell簡(jiǎn)介

  • UITableView的每一行都是一個(gè)UITableViewCell,通過(guò)dataSource的tableView:cellForRowAtIndexPath:方法來(lái)初始化每一行
  • UITableViewCell內(nèi)部有個(gè)默認(rèn)的子視圖:contentView,contentView是UITableViewCell所顯示內(nèi)容的父視圖,可顯示一些輔助指示視圖
  • 輔助指示視圖的作用是顯示一個(gè)表示動(dòng)作的圖標(biāo),可以通過(guò)設(shè)置UITableViewCell的accessoryType來(lái)顯示,默認(rèn)是UITableViewCellAccessoryNone(不顯示輔助指示視圖),其他值如下:
  1. UITableViewCellAccessoryDisclosureIndicator

  2. UITableViewCellAccessoryDetailDisclosureButton

  3. UITableViewCellAccessoryCheckmark

  • 還可以通過(guò)cell的accessoryView屬性來(lái)自定義輔助指示視圖(比如往右邊放一個(gè)開(kāi)關(guān))

UITableViewCell的contentView

  • contentView下默認(rèn)有3個(gè)子視圖
  1. 其中2個(gè)是UILabel(通過(guò)UITableViewCell的textLabel和detailTextLabel屬性訪問(wèn))
  2. 第3個(gè)是UIImageView(通過(guò)UITableViewCell的imageView屬性訪問(wèn))
  • UITableViewCell還有一個(gè)UITableViewCellStyle屬性,用于決定使用contentView的哪些子視圖,以及這些子視圖在contentView中的位置
  1. UITableViewCellStyleDefault

  2. UITableViewCellStyleSubtitle
  3. UITableViewCellStyleValue1
  4. UITableViewCellStyleValue2

UITableViewCell結(jié)構(gòu)

Cell的重用原理

  • 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ì)象

  • 還有一個(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 *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   {

    // 1.定義一個(gè)cell的標(biāo)識(shí)

    static NSString *ID = @"mjcell";

     // 2.從緩存池中取出cell

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    // 3.如果緩存池中沒(méi)有cell

    if (cell == nil)

    {

      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

     }

    // 4.設(shè)置cell的屬性...

    return cell;

  }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 米脂县| 元谋县| 平陆县| 中牟县| 隆昌县| 连城县| 陕西省| 平原县| 瑞金市| 米林县| 施秉县| 灌云县| 德保县| 桃园市| 额济纳旗| 金阳县| 赫章县| 文安县| 旌德县| 襄垣县| 香格里拉县| 西吉县| 海阳市| 襄垣县| 大悟县| 永安市| 龙州县| 金昌市| 吴堡县| 城固县| 新绛县| 益阳市| 中卫市| 商洛市| 叙永县| 肃宁县| 佛山市| 白河县| 新闻| 双城市| 景德镇市|