中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS開發那些事--簡單表視圖

發布時間:2020-07-25 16:05:29 來源:網絡 閱讀:675 作者:tony關東升 欄目:移動開發

表視圖是iOS開發中使用最頻繁的視圖,我們一般都會選擇以表的形式來展現數據,比如通訊錄、頻道列表等。表視圖分段、分組、索引等功能使我們所展 示的數據看起來更規整更有調理,更令人興奮的是表視圖還可以利用細節展示等功能多層次的展示數據,正所謂一表勝千言。 不過,相較于其它控件表視圖的使用比較復雜,但是對比于表視圖各種靈活多變的功能,我們在使用上花費的努力還是相當值得的。

 

簡單表視圖

表視圖的形式靈活多變,本著由淺入深的原則,我們先從簡單表視圖開始學習。本節講的簡單表視圖是動態表,(iOS 5之前全部是動態表沒有動態表和靜態表區別)。

創建簡單表視圖

在iOS 5之后我們可以使用xib或者故事板技術創建表視圖,要顯示的是一個最基本的表,我們只需實現UITableViewDataSource協議中必須要實 現的方法即可,分別是tableView:numberOfRowsInSection:和 tableView:cellForRowAtIndexPath:就可以了。:

iOS開發那些事--簡單表視圖

構造方法initWithFrame:style:是在實例化表視圖的時候調用,如果采用xib或故事板來設計表視圖,那么表視圖的創建是在實例化 表視圖控制器的時候完成的,表視圖顯示的時候會發出tableView:numberOfRowsInSection:消息詢問當前節中的行數,表視圖單 元格顯示的時候會發出tableView:cellForRowAtIndexPath:消息為單元格提供顯示數據。

我們創建一個簡單表視圖,單元格使用默認樣式,有圖標和主標題,顯示的是世界杯球隊的信息。

 iOS開發那些事--簡單表視圖

使用“Single View Application”模板創建一個工程,工程名為“SimpleTable”,打開IB設計畫面,在“View Controller Scene”選中“View Controller”刪除控制器,然后從控件庫中拖拽一個“Table View Controller”到設計畫面。

 iOS開發那些事--簡單表視圖

將h文件中ViewController的父類從原來的UIViewController修改為UITableViewController。

在IB設計畫面左側的Scene列表中選擇“Table View Controller Scene” → “Table View Controller”, 打開表視圖控制器的標識檢查器,在Class選項里選擇“ViewController”,這是我們自己的編寫視圖控制器。

iOS開發那些事--簡單表視圖

然后在Scene列表中選擇“Table View Controller Scene” → “Table View Controller” → “Table View”, 打開表視圖的屬性檢查器。Content下有兩個選項“Dynamic Prototypes”和“Static Cells”,這兩個選項只有在故事板中才有。“Dynamic Prototypes”是構建“動態表”

iOS開發那些事--簡單表視圖

如果通過代碼來實現單元格的創建,“Prototype Cells”項目要設為0,代碼實現的模式代碼如下:

 

  1. static NSString *CellIdentifier = @”CellIdentifier”; 
  2.  
  3. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  4.  
  5. if (cell == nil) { 
  6.  
  7. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
  8.  

Identifier是可重用單元格標識符,這個可重用單元格與Collection視圖中的可重用單元格概念一樣。首先,在表視圖中查找是否有可 以重用的單元格,如果沒有就通過initWithStyle: reuseIdentifier:構造方法創建一個單元格對象。

如果要利用故事板設計單元格,要選擇“Table View Controller Scene” → “Table View Controller” → “Table View” → “Table View Cell”,打開單元格的屬性檢查器,Style下有很多選項, Identifier是指可重用單元格標識符。

 iOS開發那些事--簡單表視圖

這樣操作以后在代碼部分就不需要實例化單元格了,我們直接通過設定的Identifier取得單元格的實例,以此達到重用單元格的目的。

 

  1. static NSString *CellIdentifier = @”CellIdentifier”; 
  2.  
  3. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  4.  
  5.     if (cell == nil) { 
  6.  
  7.         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
  8.  
  9.     } 

我們需要將“team.plist”和“球隊圖片”添加到工程中,ViewController.h文件的代碼如下:

 

  1. #import <UIKit/UIKit.h> 
  2.  
  3. @interface ViewController : UITableViewController 
  4.  
  5. @property (nonatomic, strong) NSArray *listTeams; 
  6.  
  7. @end 

需要將ViewController的父類修改為UITableViewController。還定義NSArray*類型的屬性 listTeams,listTeams用來裝載從文件中讀取的數據。讀取屬性列表文件team.plist的操作是在viewDidLoad方法中實現 的

 iOS開發那些事--簡單表視圖

ViewController.m文件的viewDidLoad方法代碼如下:

 

  1. - (void)viewDidLoad 
  2.  
  3.  
  4. [super viewDidLoad]; 
  5.  
  6. NSBundle *bundle = [NSBundle mainBundle]; 
  7.  
  8. NSString *plistPath = [bundle pathForResource:@"team" ofType:@"plist"]; 
  9.  
  10. //獲取屬性列表文件中的全部數據 
  11.  
  12. self.listTeams = [[NSArray alloc] initWithContentsOfFile:plistPath]; 
  13.  
  14.  
  15. 我們再看看UITableViewDataSource協議方法,代碼如下: 
  16.  
  17. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
  18.  
  19.  
  20. return [self.listTeams count]; 
  21.  
  22.  
  23. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
  24.  
  25.  
  26. static NSString *CellIdentifier = @”CellIdentifier”; 
  27.  
  28. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
  29.  
  30. if (cell == nil) { 
  31.  
  32. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
  33.  
  34.  
  35. NSUInteger row = [indexPath row]; 
  36.  
  37. NSDictionary *rowDict = [self.listFilterTeams objectAtIndex:row]; 
  38.  
  39. cell.textLabel.text =  [rowDict objectForKey:@"name"]; 
  40.  
  41. NSString *p_w_picpathPath = [rowDict objectForKey:@"p_w_picpath"]; 
  42.  
  43. p_w_picpathPath = [p_w_picpathPath stringByAppendingString:@".png"]; 
  44.  
  45. cell.p_w_picpathView.p_w_picpath = [UIImage p_w_picpathNamed:p_w_picpathPath]; 
  46.  
  47. cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
  48.  
  49. return cell; 
  50.  

由于當前的這個表事實上只有一個節,因此不需要對節進行區分,在tableView: numberOfRowsInSection:方法中直接返回listTeams屬性的長度即可。 tableView:cellForRowAtIndexPath:方法中NSIndexPath參數的row方法可以獲得當前的單元格行索引。 cell.accessoryType屬性是設置擴展視圖類型。

我們可以將單元格的樣式UITableViewCellStyleDefault替換為其它三種,來體驗一下其它的三種單元格樣式的效果。

iOS開發那些事--簡單表視圖

簡單表案例運行結果

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

渑池县| 沧州市| 甘德县| 木里| 南城县| 长沙市| 神农架林区| 临海市| 大化| 阿荣旗| 东乡县| 平塘县| 翼城县| 南雄市| 岳阳县| 乌拉特后旗| 绵竹市| 长子县| 永和县| 东丰县| 克什克腾旗| 泰安市| 通海县| 华宁县| 伽师县| 花莲县| 拉孜县| 留坝县| 双流县| 章丘市| 秀山| 石门县| 鄂托克前旗| 泗阳县| 西宁市| 武汉市| 门头沟区| 大渡口区| 阜阳市| 博乐市| 包头市|