亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【一步一步學IOS5 】 定制UITableView表視圖單

系統 2601 0

之前,我們已經創建了一個簡單的表視圖App,用來顯示菜單列表和圖片。

下面,我們繼續改進該App,是其效果更佳。

?

1)實現不同的行顯示不同的圖片

2) ?定制表視圖單元格

?

?

1.顯示不同的縮略圖:

?

在修改代碼之前,我們先回顧一下在數據行上顯示縮略圖的代碼:

?

?

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

{

? ? static NSString *simpleTableIdentifier = @"simpleTableItem" ;

? ? UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier :simpleTableIdentifier];

?

? ? if (cell == nil ) {

? ? ? ? cell = [[ UITableViewCell alloc ] initWithStyle : UITableViewCellStyleDefault reuseIdentifier :simpleTableIdentifier];

? ? }

?

cell. textLabel . text = [ tableData objectAtIndex :indexPath. row ];

cell. imageView . image = [ UIImage imageNamed : @"creme_brelee.jpg" ];

return cell;

}


上面代碼中,我們添加了代碼行,指示UITableView在每一行顯示creme_brelee.jpg縮略圖。顯然,為了顯示不同的圖片,我們需要更改這一行代碼。之前解釋過,在每一行數據顯示之前,iOS自動調用一次cellForRowAtIndexPath方法。

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

查看該方法的參數,在調用的時候,傳入indexPath參數。indexPath 參數包包含了數據行的行編號(也就是節點編號)。你可以使用indexPath.row屬性獲知當前指向的行。和數組一樣,數據行從0開始。也就是說,indexPath.row屬性針對表的第一行返回0.

為了顯示不同的縮略圖,我們將添加一個 新的數據(如thumbnails),存放縮略圖的文件名稱:

@implementation SimpleTableViewController

{

? ? NSArray * tableData;

? ? NSArray * thumbnails;

? ? NSString * prepTime;

? ? NSArray * time;

}

?

?

- ( void )viewDidLoad

{

? ? [ super viewDidLoad ];

? ? //Initialize table data

? ? tableData = [ NSArray arrayWithObjects : @"Egg Benedict" , @"Mushroom Risotto" , @"Full Breakfast" , @"Hamburger" , @"Ham and Egg sandwith" , @"Creme Brelee" , @"White Chcolate Dount" , @"Starbucks Coffee" , @"Vegetable Curry" , @"Instant Noodle with Egg" , @"Noodle with BBQ Pork" , @"Japanese Noodle with Pork" , @"Green Tea" , @"Thai Shrimp Cake" , @"Angry Birds Cake" , @"Ham and Cheese Panini" , nil ];

?

? ? //Initialize thumbnails

? ? thumbnails = [ NSArray arrayWithObjects : @"egg_benedict.jpg" , @"mushroom_risotto.jpg" , @"full_breakfast.jpg" , @"hamburger.jpg" , @"ham_and_egg_sandwich.jpg" , @"creme_brelee.jpg" , @"white_chocolate_donut.jpg" , @"starbucks_coffee.jpg" , @"vegetable_curry.jpg" , @"instant_noodle_with_egg.jpg" , @"noodle_with_bbq_pork.jpg" , @"japanese_noodle_with_pork.jpg" , @"green_tea.jpg" , @"thai_shrimp_cake.jpg" , @"angry_birds_cake.jpg" , @"ham_and_cheese_panini.jpg" , nil ];

?

? ?? //Initialize prepTime

? ? prepTime = @"PrepTime:" ;

?

? ? //Initialize time

? ? time = [ NSArray arrayWithObjects : @"30 min" , @"20 min" , @"10 min" , @"40 min" , @"50 min" , @"70 min" , @"90 min" , @"30 min" , @"30 min" , @"30 min" , @"30 min" , @"30 min" , @"30 min" , @"30 min" , @"30 min" , @"30 min" , nil ];


}


從上面的代碼可以看出,我們初始化thumbnails數組位縮略圖文件名列表。圖片順序和tableData數組記錄保持一致。
圖片包見附件。

最后,更改cellForRowAtIndexPath方法的代碼行:

cell.imageView.image = [UIImage imageNamed:[thumbnails objectAtIndex:indexPath.row]];


2.[thumbnails objectAtIndex:indexPath.row] ?有什么用途?

該代碼負責位特定行檢索縮略圖的文件名。對第一行,indexPath.row 屬性返回0, 我們使用objectAtIndex方法,從thumbnails 數組獲得第一張圖片(如 egg_benedict.jpg)

在保存所有更改之后,再次運行A pp,界面效果如下:


【一步一步學IOS5 】 定制UITableView表視圖單元格
?
3.定制表視圖單元格

顯示效果如下:

【一步一步學IOS5 】 定制UITableView表視圖單元格
?
4.設計單元格

在項目導航欄中,右擊SimpleTable文件夾,并選擇New File...。

為了設計我們自己的單元格,我們需要為單元格創建一個新的Interface Builder 文件。針對這個例子,我們僅需要從一個Empty的用戶界面開始,點擊Next按鈕繼續。

在彈出選擇device family 窗口中,選擇iPhone,并點擊Next按鈕繼續。保存文件為SimpleTableCell.

在創建文件之后,可以在項目導航欄可以看到這個文件,選擇SimpleTableCell.xib文件切換到Interface Builder窗口。

下面,我們將設計定制單元格的用戶界面。

在對象庫(Object Library)中,選擇Table View Cell 控件,并拖拽到Interface Builder窗口的設計區域。

為了容納大尺寸的縮略圖,我們需要更改單元格的高度。按住單元格的底部或頂部邊緣,拖拉到78高度。

另外一個方法是,你可以通過Size Inspector 窗口來更改高度:

接著,選擇工具區域(Utility Area)上部分的Attribute Inspector 窗口,設置定制單元格的Identifier屬性值為:SimpleTableCell.這個Identifier將在后面代碼用到。

在配置好Table Cell View 之后,我們將放置其他控件在里面。選擇 Image View 控件,并拖拽到Table Cell View里面。

圖像視圖控件用來顯示縮略圖,我們可以通過改變控件尺寸,以適合單元格的大小。

我們設置圖像控件的高度和寬度為69像素

接著,我們添加三個標簽Lables 控件,Name, Prep Time 和 Tiime。 Name 標簽顯示菜譜名稱;Prep Time 是一個靜態標簽,顯示文本Prep Time (準備時間); 最后,Time標簽是一個動態標簽,顯示特定菜譜的實際準備時間。

添加Label 控件,從對象庫(Object Library) 選擇 Label 控件,拖拽到單元格。雙擊Label 更改其名稱

選擇Label,然后選擇Attribute Inspector 窗口,在該窗口,你可以修改Font設置和最小化字體大小,同時,還可以更改字體顏色和對齊方式。

最終設計的UI如下圖所示:

【一步一步學IOS5 】 定制UITableView表視圖單元格
?

5.為定制單元格創建類

目前為止,我們已經設計好了表單元格,但是如何改變定制單元格的標簽呢?

我們將位定制的表視圖創建一個新類,這個類表示定制單元格的底層數據

和之前一一樣,右擊項目欄中SimpleTable 文件夾,選擇New File...

接著Xcode彈出一窗口,選擇Cocoa Touch 下面的 Object-C class, 點擊Next

輸入SimpleTableCell 作為類名,并選擇UITableViewCell 作為 Subclass of 下拉選項。

點擊next,點擊Create按鈕。

Xcode 應該在項目導航欄中創建了2個文件:SimpleTableCell.h 和 SimpleTableCell.m。

SimpleTableCell 類作為定制單元格的數據模型。在單元格中,有3個值是需要變更的:縮略圖、菜譜名稱標簽和時間標簽。在類中,我們將添加3個屬性,分別表示這些動態值。

打開SimpleTableCell.h 文件,在@end代碼前面添加如下屬性:

@property ( nonatomic , weak ) IBOutlet UILabel *nameLabel;

?

@property ( nonatomic , weak ) IBOutlet UILabel *prepTimeLabel;

?

@property ( nonatomic , weak ) IBOutlet UIImageView *thumbnailImageView;

?

@property ( nonatomic , weak ) IBOutlet UILabel *time;


6.Property 和 Outlet

上述代碼定義了三個實例變量,下面會用來和Interface Builder 中的表視圖單元格進行關聯。
關鍵字@property 用來在類中定義一個屬性:

@property(attibutes) type name;

關于前面的代碼,weak 和 nonatomic 是 property 的特性。 UILabel 和 UIImageView 是類型,
nameLabel, prepTimeLabel 和 thumbnailImageView是變量名稱。

IBOutlet :你可以將IBOutlet理解為一個指示符(indicator). 為了關聯實例變量和表視圖單元格中的文件,我們使用IBOutlet關鍵字,讓Interface Builder 知道它們允許建立連接。隨后,你將看到如何在這些Outlets 和Interface Builder 中的對象建立連接。

現在,打開SimpleTableCell.m 文件,跟隨在@implementation SimpleTableCell 代碼行下面,添加如下代碼:

@synthesize nameLabel = _nameLabel;

?

@synthesize prepTimeLabel = _prepTimeLabel;

?

@synthesize thumbnailImageView = _thumbnailImageView;

?

@synthesize time = _time;



7.@synthesize指令

@synthesize 關鍵字告訴編譯器自動生成代碼,用來訪問前面定義的屬性。如過你忘記包含這些指令,Xcode 將拋出異常

8.建立連接

選擇SimpleTableCell.xib 文件,返回Interface Builder 界面。現在,我們將在此類的屬性(或實例變量)和界面上的Label、ImageView控件上建立連接。

首先,選擇單元格,并在Identity Inspector 窗口中,選擇類SimpleTableCell.這里將關聯單元格視圖(cell view)和前面創建的定制類。

現在,我們將和屬性建立連接。右擊Objects下面的SimpleTableCell, 顯示Outlets 監視器(inspector).點擊并按住nameLabel右側的圓形圖標,拖拉到Label - Name 對象上。 Xcode 自動建立它們之間的連接。

重復上面的步驟,為prepTimeLabel 和 thumbnailImageView 建立連接。

(1)連接prepTimeLabel 和 Label - Time 對象;
(2)連接thumbnailImageView 和 ImageView 對象;

9.更新SimpleTableViewController

我們已經完成了定制表視圖單元格的設計和編碼工作,最后,我們要做的更新是 - 在SimpleTableViewController 中使用定制單元格。

再次訪問SimpleTableViewController.m中用來創建表視圖行的代碼

我們使用默認的表視圖單元格(如UITableViewCell)來顯示表元素。為了使用我們之前創建的定制單元格,我們需要創建SimpleTableView.m 中的這部分代碼,如下所示:

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

{

? ? static NSString *simpleTableIdentifier = @"SimpleTableCell" ;

?

? ? SimpleTableCell *cell = ( SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier :simpleTableIdentifier];

?

? ? if (cell == nil ) {

? ? ? ? NSArray *nib = [[ NSBundle mainBundle ] loadNibNamed : @"SimpleTableCell" owner : self options : nil ];

? ? ? ? cell = [nib objectAtIndex : 0 ];

? ? }

? ? cell. nameLabel . text = [ tableData objectAtIndex :indexPath. row ];

? ? cell. thumbnailImageView . image = [ UIImage imageNamed :[ thumbnails objectAtIndex :indexPath. row ]];

? ??cell. prepTimeLabel . text = prepTime ;

? ??cell. time . text = [ time objectAtIndex :indexPath. row ];

?

? ? return cell;

}

?

然后,在更新好代碼之后,Xcode檢測到一些錯誤,并顯示在源碼編輯器中:

?

這是因為我們少引用SimpleTableCell.h 頭文件。

?

最后,因為表單元格的高度更改為78,因此在@end代碼行之前添加如下代碼:

?

?

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

{

? ? return 78 ;

}


現在,點擊Run按鈕,你的SimpleTableApp運行界面如下圖所示:


【一步一步學IOS5 】 定制UITableView表視圖單元格
?

?

?


?

【一步一步學IOS5 】 定制UITableView表視圖單元格


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲女人逼 | 亚洲伊人久久大香线蕉啊 | 久草视频免费看 | 国产69精品久久久久999小说 | 精品国产系列 | 日本一区二区三区在线观看 | 精品欧美一区手机在线观看 | 99热久久精品免费精品 | 羞羞视频免费观看网站 | 国内精品自在自线在免费 | 亚洲国产精品热久久2022 | 欧美一区精品二区三区 | 国产日韩欧美在线观看免费视频 | 波多野结衣3女同在线观看 波多野结衣av1区2区3区 | 免费福利视频在线观看 | 欧美精品一区二区三区在线 | 国产黄mmd在线观看免费 | 欧美特级爽毛片 | 久久福利资源国产精品999 | 男女一级免费视频 | 中文字幕 亚洲一区 | 国产乱码精品一区二区三上 | 日韩精品福利视频一区二区三区 | 亚洲国产欧美在线人成 | 四虎免费播放观看在线视频 | 国产农村一一级特黄毛片 | 免费播放欧美毛片欧美aaaaa | 九九免费精品视频在这里 | 天天摸夜夜 | 久久久不卡国产精品一区二区 | 欧美亚洲国产第一页草草 | 国产精品原创视频 | 欧美日韩一级大片 | 亚洲国产综合精品中文字幕 | 福利综合网 | 欧美精品国产日韩综合在线 | 女人国产香蕉久久精品 | 亚洲一区二区免费在线观看 | 日日夜夜操天天干 | 欧美色视频日本片高清在线观看 | 最新亚洲国产有精品 |