表視圖是iOS開發(fā)中使用最頻繁的視圖,我們一般都會選擇以表的形式來展現(xiàn)數(shù)據(jù),比如通訊錄、頻道列表等。表視圖分段、分組、索引等功能使我們所展 示的數(shù)據(jù)看起來更規(guī)整更有調(diào)理,更令人興奮的是表視圖還可以利用細(xì)節(jié)展示等功能多層次的展示數(shù)據(jù),正所謂一表勝千言。 不過,相較于其它控件表視圖的使用比較復(fù)雜,但是對比于表視圖各種靈活多變的功能,我們在使用上花費的努力還是相當(dāng)值得的。
站在用戶的角度思考問題,與客戶深入溝通,找到虞城網(wǎng)站設(shè)計與虞城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋虞城地區(qū)。
簡單表視圖
表視圖的形式靈活多變,本著由淺入深的原則,我們先從簡單表視圖開始學(xué)習(xí)。本節(jié)講的簡單表視圖是動態(tài)表,(iOS 5之前全部是動態(tài)表沒有動態(tài)表和靜態(tài)表區(qū)別)。
創(chuàng)建簡單表視圖
在iOS 5之后我們可以使用xib或者故事板技術(shù)創(chuàng)建表視圖,要顯示的是一個最基本的表,我們只需實現(xiàn)UITableViewDataSource協(xié)議中必須要實 現(xiàn)的方法即可,分別是tableView:numberOfRowsInSection:和 tableView:cellForRowAtIndexPath:就可以了。:
構(gòu)造方法initWithFrame:style:是在實例化表視圖的時候調(diào)用,如果采用xib或故事板來設(shè)計表視圖,那么表視圖的創(chuàng)建是在實例化 表視圖控制器的時候完成的,表視圖顯示的時候會發(fā)出tableView:numberOfRowsInSection:消息詢問當(dāng)前節(jié)中的行數(shù),表視圖單 元格顯示的時候會發(fā)出tableView:cellForRowAtIndexPath:消息為單元格提供顯示數(shù)據(jù)。
我們創(chuàng)建一個簡單表視圖,單元格使用默認(rèn)樣式,有圖標(biāo)和主標(biāo)題,顯示的是世界杯球隊的信息。
使用“Single View Application”模板創(chuàng)建一個工程,工程名為“SimpleTable”,打開IB設(shè)計畫面,在“View Controller Scene”選中“View Controller”刪除控制器,然后從控件庫中拖拽一個“Table View Controller”到設(shè)計畫面。
將h文件中ViewController的父類從原來的UIViewController修改為UITableViewController。
在IB設(shè)計畫面左側(cè)的Scene列表中選擇“Table View Controller Scene” → “Table View Controller”, 打開表視圖控制器的標(biāo)識檢查器,在Class選項里選擇“ViewController”,這是我們自己的編寫視圖控制器。
然后在Scene列表中選擇“Table View Controller Scene” → “Table View Controller” → “Table View”, 打開表視圖的屬性檢查器。Content下有兩個選項“Dynamic Prototypes”和“Static Cells”,這兩個選項只有在故事板中才有。“Dynamic Prototypes”是構(gòu)建“動態(tài)表”
如果通過代碼來實現(xiàn)單元格的創(chuàng)建,“Prototype Cells”項目要設(shè)為0,代碼實現(xiàn)的模式代碼如下:
- static NSString *CellIdentifier = @”CellIdentifier”;
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
- }
Identifier是可重用單元格標(biāo)識符,這個可重用單元格與Collection視圖中的可重用單元格概念一樣。首先,在表視圖中查找是否有可 以重用的單元格,如果沒有就通過initWithStyle: reuseIdentifier:構(gòu)造方法創(chuàng)建一個單元格對象。
如果要利用故事板設(shè)計單元格,要選擇“Table View Controller Scene” → “Table View Controller” → “Table View” → “Table View Cell”,打開單元格的屬性檢查器,Style下有很多選項, Identifier是指可重用單元格標(biāo)識符。
這樣操作以后在代碼部分就不需要實例化單元格了,我們直接通過設(shè)定的Identifier取得單元格的實例,以此達(dá)到重用單元格的目的。
- static NSString *CellIdentifier = @”CellIdentifier”;
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
- }
我們需要將“team.plist”和“球隊圖片”添加到工程中,ViewController.h文件的代碼如下:
- #import <UIKit/UIKit.h>
- @interface ViewController : UITableViewController
- @property (nonatomic, strong) NSArray *listTeams;
- @end
需要將ViewController的父類修改為UITableViewController。還定義NSArray*類型的屬性 listTeams,listTeams用來裝載從文件中讀取的數(shù)據(jù)。讀取屬性列表文件team.plist的操作是在viewDidLoad方法中實現(xiàn) 的
ViewController.m文件的viewDidLoad方法代碼如下:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSBundle *bundle = [NSBundle mainBundle];
- NSString *plistPath = [bundle pathForResource:@"team" ofType:@"plist"];
- //獲取屬性列表文件中的全部數(shù)據(jù)
- self.listTeams = [[NSArray alloc] initWithContentsOfFile:plistPath];
- }
- 我們再看看UITableViewDataSource協(xié)議方法,代碼如下:
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- return [self.listTeams count];
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- static NSString *CellIdentifier = @”CellIdentifier”;
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
- }
- NSUInteger row = [indexPath row];
- NSDictionary *rowDict = [self.listFilterTeams objectAtIndex:row];
- cell.textLabel.text = [rowDict objectForKey:@"name"];
- NSString *p_w_picpathPath = [rowDict objectForKey:@"p_w_picpath"];
- p_w_picpathPath = [p_w_picpathPath stringByAppendingString:@".png"];
- cell.p_w_picpathView.p_w_picpath = [UIImage p_w_picpathNamed:p_w_picpathPath];
- cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
- return cell;
- }
由于當(dāng)前的這個表事實上只有一個節(jié),因此不需要對節(jié)進(jìn)行區(qū)分,在tableView: numberOfRowsInSection:方法中直接返回listTeams屬性的長度即可。 tableView:cellForRowAtIndexPath:方法中NSIndexPath參數(shù)的row方法可以獲得當(dāng)前的單元格行索引。 cell.accessoryType屬性是設(shè)置擴展視圖類型。
我們可以將單元格的樣式UITableViewCellStyleDefault替換為其它三種,來體驗一下其它的三種單元格樣式的效果。
簡單表案例運行結(jié)果
文章題目:iOS開發(fā)那些事--簡單表視圖
當(dāng)前路徑:http://jinyejixie.com/article46/pgeghg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、動態(tài)網(wǎng)站、軟件開發(fā)、微信小程序、全網(wǎng)營銷推廣、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)