MVC思想架構的簡單自訂UITableViewCell,mvcuitableviewcell

來源:互聯網
上載者:User

MVC思想架構的簡單自訂UITableViewCell,mvcuitableviewcell
     在iOS的開發過程中,架構思想是很重要的一部分,目前的主流應該分為MVC與MVVM兩種,在這裡不做過多的區分,有興趣的同學可以看看唐巧大神的一篇文章《被誤解的MVC和被神化的MVVM》。    UITableViewCell應該是iOS開發中使用最多的控制項之一,MVC模式也是主流,那麼將這兩者結合起來,必然能大大的提升我們的代碼品質。    MVC模式,Model—View—Controller,按照這個邏輯,能使代碼進行明確的分工,相應的類只幹該乾的事,這樣不僅大大的提高了代碼的耦合性,能便於後期的維護。    那麼首先,我們建立一個類,取名MyCell,繼承自UITableViewCell類。我們在這個類裡自訂我們想自訂的結構,以後在Controller只要給這個類建立對象就可以了。回想上一次的UITableViewCell的複用機制,我們不難想到初始化方法,我們給初始化方法做一次重寫,代碼如下:- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

    self = [superinitWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {

        // Initialization code

        [self createUI];

    }

    returnself;

}

     這裡我們給UI頁面的定製,單獨寫成一個方法,然後去進行我們自己的定製

 

- (void)createUI{

    _iconView = [[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 70, 70)];

    [self.contentView addSubview:_iconView];

    _nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 5, 230, 25)];

    _nameLabel.font = [UIFont systemFontOfSize:16];

    _nameLabel.textColor = [UIColor blackColor];

    [self.contentView addSubview:_nameLabel];

    _priceLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 30, 230, 25)];

    _priceLabel.font = [UIFont systemFontOfSize:14];

    _priceLabel.textColor = [UIColor redColor];

    [self.contentView  addSubview:_priceLabel];    

    _detailLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 55, 230, 25)];

    _detailLabel.font = [UIFont systemFontOfSize:12];

    _detailLabel.textColor = [UIColor grayColor];

    [self.contentView addSubview:_detailLabel]; 

}

    可以看到,我們在當前的cell上,自訂了一個UIImageView用來載入圖片,三個UILable用來展示相應的資訊。一般來說,Controller裡面採用的是self.view addSubview的方式來載入控制項,同樣的,UITableViewCell也是一個View,但是它就不能用view ,而是用contentView來載入,這個以後再提。於是這樣我們就能將我們需要的設計,在我們這個cell裡實現了。

    在日常的開發工作中,很少有將資料寫死的,通常都是從後台通過請求接受資料,然後將資料再根據需要載入到相應的控制項上,所以對於我們來說,控制項是可變的,控制項上的資料是可變的,這樣的話,我們就將所需要的資料單獨抽取出來建成一個模型。分析一下需求與代碼,我們現在需要的是一個UIImageView的image與三個UILable的text資訊,所以,我們將這些屬性單獨抽取出來作為我們這個cell的模型。

    建立一個MyModel類,這個類繼承自NSObject,裡面放的就是我們cell的屬性,代碼如下:

    @property (retain, nonatomic) UIImage *icon;

    @property (copy, nonatomic) NSString *nameStr;

    @property (copy, nonatomic) NSString *priceStr;

    @property (copy, nonatomic) NSString *detailStr;

注意:因為我們這個類是需要讓其他的類引用,並且是需要接受資料的,所以應該寫在.h檔案,interface下面。

到這裡,我們的MVC的思想大致就出來了,但是還有一個問題,那就是如何讓cell與自己的模型相關聯起來。我們需要在cell中往外暴露一個方法,去接收模型,同樣的原因,我們在cell的.h檔案中聲明這個方法:

- (void)customWithMyModel:(MyModel *)bm;

然後在cell的.m檔案中來實現這個方法,參數類型就是我們自訂的這個模型類

 

- (void)customWithMyModel:(MyModel *)bm{

    _iconView.image = bm.icon;

    _nameLabel.text = bm.nameStr;

    _priceLabel.text = bm.priceStr;

    _detailLabel.text = bm.detailStr;

}

到這裡為止,我們的自訂部分基本就結束了,接下來就是在Controller裡面去使用我們自訂的Cell了

 

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

    staticNSString *idt= @"idt";

    MyCell *cell = [tableView dequeueReusableCellWithIdentifier:idt];

    if (!cell) {

        cell = [[MyCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:idt];

    }

    MyModel *mm= [_dataArrobjectAtIndex:indexPath.row-1];

    //將資料模型傳給cell,讓cell設定圖片及文字

    [cell customWithMyModel:mm];  

    return cell;

}

這樣就能建立一個我們自訂的,使用MVC思想架構的cell了,資料怎麼接?那就是另外一篇筆記了哈哈。

 



 

 

 

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.