【ios學習記錄】- 通過nib檔案實現自訂表格視圖單元

來源:互聯網
上載者:User

【ios學習記錄】- 通過nib檔案實現自訂表格視圖單元

添加自訂表格視圖單元有兩種方法:一種方法是建立單元時在程式中添加子視圖,第二種方法是從分鏡或者nib檔案中載入它們,在這裡我們簡單採用第二種方法

一般來說,ios資料列表包含了兩部分:表視圖(分組表和無格式表)和表視圖單元。每個表視圖都是UITableView類的一個執行個體,用於顯示表資料的視圖對象;而每個可見行都是UITableViewCell類的一個執行個體,顯示表中的一行。如所示:

表視圖單元包含了三種樣式:映像,文字標籤和詳細文字標籤。而對於某種業務的要求(如右上要顯示標籤文字,右下顯示映像),預設的單元樣式不能滿足,此時我們可以對錶視圖單元進行自訂顯示。

添加自訂表格視圖單元有兩種方法:一種方法是建立單元時在程式中添加子視圖,第二種方法是從分鏡或者nib檔案中載入它們,在這裡我們簡單採用第二種方法,如下:

在開始之前,咱們有必要知道UITableView的兩個協議:UITableViewDelegate和UITableViewDataSource。表視圖從遵循UITableViewDelegate協議的對象中擷取配置資料,從遵循UITableViewDataSource協議的對象中獲得行資料。

總體關係圖:

主要流程:

1、 建立CustomCellTableView工程,選擇Single View Application。

2、 建立UITableViewCell的子類CustomCell
選擇File->New->File,然後選擇Cocoa Touch Class。

輸入“CustomCell”,繼承於UITableViewCell,勾選“Also create XIB file” ,按Next直至成功。

3、 建立表視圖單中繼資料檔案CustomCellData。

選擇File->New->File,先選擇Objective-C File建立CustomCellData.m檔案,然後再選擇Header File建立CustomCellData.h檔案。

在這裡,因為表視圖單元的資料是通過CustomCellData來儲存,顯示視圖是通過CustomCell,所以檔案組織形式還是採用資料(model)和表視圖單元視圖(View)分開。建立一個CustomCell Group檔案夾,然後再分別建立View檔案夾和Model檔案夾,用以分別歸納CustomCell和CustomCellData檔案。如所示。

4、 用介面構建器可視化布局CustomCell.xib,設定約束,介面如所示。

Identifier設為CustomCell。

Custom Class要確定為CustomCell。

按住Controll鍵,將輸出介面關聯至相關的標籤。

5、 開啟主分鏡main storyboard,串連tableview到ViewController.m

點擊ViewController,確保Custom Class為ViewController。

點擊TableView,按住control鍵串連輸出變數到View Controller。

這裡tableview的委託(delegate)有兩種設定方法,第一種是nib檔案中設定,按住controll鍵,分別把dataSource和delegate拉到tableview中;第二種是在代碼中設定,開啟ViewController.m,在viewDidLoad中輸入以下代碼:

self.tableView.dataSource = self;self.tableView.delegate = self;

6、 匯入圖片。

直接拖拉圖片檔案password.png到項目導覽列中,如所示。

7、 輸入核心代碼。

CustomCellData.m:用以儲存表視圖儲存格中要顯示對象的資料。

#import "CustomCellData.h"@implementation CustomCellData+ (instancetype)cellWithInfo:(NSString *)mainTitle                    subTitle:(NSString *)subTitle                   leftImage:(NSString *)leftImage                  rightImage:(NSString *)rightImage                        time:(NSString *)time{    CustomCellData *item = [[self alloc] init];    item.mainTitle = mainTitle;    item.subTitle = subTitle;    item.leftImage = leftImage;    item.rightImage = rightImage;    item.time = time;    return item;}@end

CustomCell:表視圖單元,繼承自UITableViewCell,表格中顯示的每一行。

#import "CustomCell.h"@implementation CustomCell/* 可重用cell單元 */+ (instancetype)cellWithTableView:(UITableView *)tableView {    static NSString *ID = @"CustomCell";    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];    if (cell == nil) {        cell = [[[NSBundle mainBundle]loadNibNamed:[[self class] description] owner:nil options:nil]lastObject];    }    return cell;}- (void)setItemData:(CustomCellData *)itemData{    _itemData = itemData;    [self setupData];}- (void)setupData{    self.leftImage.image = (_itemData.leftImage == nil ? nil : [UIImage imageNamed:_itemData.leftImage]);    self.rightImage.image = (_itemData.rightImage == nil ? nil : [UIImage imageNamed:_itemData.rightImage]);    self.mainTitle.text = _itemData.mainTitle;    self.mainTitle.font = [UIFont fontWithName:@"Helvetica" size:15.f];    self.SubTitle.textColor = [UIColor colorWithRed:((float)((0x800000 & 0xFF0000) >> 16))/255.0                                              green:((float)((0x008A00 & 0xFF00) >> 8))/255.0                                               blue:((float)(0x000087 & 0xFF))/255.0 alpha:1.0];    self.SubTitle.text = _itemData.subTitle;    self.SubTitle.font = [UIFont fontWithName:@"Helvetica" size:9.f];    self.timeLabel.text = _itemData.time;    self.timeLabel.font = [UIFont fontWithName:@"Helvetica" size:9.f];}@end

ViewController.h:實現UITableView協議。

@interface ViewController : UIViewController

ViewController.m:實現UITableViewDataSource和UITableViewDelegate協議方法,並在cellForRowAtIndexPath協議方法中調用自訂CustomCell。記得在ViewController.h中添加協議。

#pragma mark UITableViewDataSource/** * 每行表視圖儲存格顯示的內容資料設定 */- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    CustomCell *cell = nil;    CustomCellData *itemData = nil;    if (0 == indexPath.section) {        itemData = self.dataArray[indexPath.row];    }else if (1 == indexPath.section) {        itemData = self.saleDataArray[indexPath.row];    }    cell = [CustomCell cellWithTableView:tableView];    cell.itemData = itemData;    return cell;}- (void)setupData{    NSDate *dateNow = [NSDate date];    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    [formatter setDateFormat : @"H:m"];    NSString *time = [formatter stringFromDate:dateNow];[self.dataArray addObject:[CustomCellData cellWithInfo:@"檔案傳輸助手" subTitle:@"想傳什麼儘管傳" leftImage:@"ic_sale_re" rightImage:@"password" time:time]];[self.dataArray addObject:[CustomCellData cellWithInfo:@"通訊錄" subTitle:@"你的專屬通訊錄" leftImage:@"ic_sale_re" rightImage:@"password" time:time]];[self.dataArray addObject:[CustomCellData cellWithInfo:@"訂閱號" subTitle:@"人人都是產品經理" leftImage:@"ic_sale_re" rightImage:@"password" time:time]];[self.saleDataArray addObject:[CustomCellData cellWithInfo:@"李雷" subTitle:@"北京大學附屬中學" leftImage:@"ic_sale_re" rightImage:@"password" time:time]];[self.saleDataArray addObject:[CustomCellData cellWithInfo:@"韓梅梅" subTitle:@"北京大學附屬中學" leftImage:@"ic_sale_re" rightImage:@"password" time:time]];}

運行程式,OK成功。詳情代碼請參考 自訂表格視圖單元。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.