优化tableView加载cell与model的过程

简介:

优化tableView加载cell与model的过程

 

效果图

 

说明

1. 用多态的特性来优化tableView加载cell与model的过程

2. swift写起来果然要比Objective-C简洁了不少

 

源码

https://github.com/YouXianMing/Swift-TableViewDemo

https://github.com/YouXianMing/OC-TableViewDemo



//
//  ViewController.swift
//  Swift-TableViewDemo
//
//  Created by YouXianMing on 15/9/28.
//  Copyright © 2015年 YouXianMing. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let typeOneCellFlag : String! = "typeOneCellFlag"
    let typeTwoCellFlag : String! = "typeTwoCellFlag"
    
    var datasArray : NSMutableArray!
    var tableView  : UITableView!
    
    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        self.initDatasArray()
        
        self.initTableView()
    }

    // 数据源相关
    func initDatasArray() {
    
        datasArray = NSMutableArray()
        datasArray.addObject(TypeOneModel(flag: typeOneCellFlag, cellHeight: 100, data: "TypeOneModel"))
        datasArray.addObject(TypeTwoModel(flag: typeTwoCellFlag, cellHeight: 200, data: "TypeTwoModel"))
    }
    
    // tableView相关
    func initTableView() {
    
        tableView = UITableView(frame: view.bounds, style: .Plain)
        tableView.delegate       = self
        tableView.dataSource     = self
        tableView.separatorStyle = .None
        view.addSubview(tableView)
        
        tableView.registerClass(TypeOneCell.classForCoder(), forCellReuseIdentifier: typeOneCellFlag)
        tableView.registerClass(TypeTwoCell.classForCoder(), forCellReuseIdentifier: typeTwoCellFlag)
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
        return datasArray.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        let model : BaseModel! = datasArray[indexPath.row] as! BaseModel
        
        let cell : BaseTableViewCell! = tableView.dequeueReusableCellWithIdentifier(model.cellFlag!) as! BaseTableViewCell
        cell.tableView                = tableView
        cell.indexPath                = indexPath
        cell.data                     = model.data
        cell.loadData()
        
        return cell
    }
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        let model : BaseModel! = datasArray[indexPath.row] as! BaseModel
        
        return model.cellHeight!
    }
}

细节


目录
相关文章
|
6月前
|
监控 数据可视化 Linux
Qt Model&View&Delegate(模型-视图-代理) 介绍和使用
Qt Model&View&Delegate(模型-视图-代理) 介绍和使用
Qt Model&View&Delegate(模型-视图-代理) 介绍和使用
|
JavaScript 芯片
PADS Layout添加工艺边和Mark点的方法和步骤
PCB在进行贴片加工的时候(SMT),一般有3种方式(基于开钢网的情况):全人工、半自动、全自动。全人工就是刷钢网,放置元器件都是人工操作。半自动是指人工刷钢网,放置元器件上自动贴片机。全自动是指刷钢网和放置元器件都是机器自动完成。对于全人工的我们就很好理解,毕竟人是活的,最智能的,遇到突发情况都可以想办法处理。
722 0
TableView列表展开不同cell
TableView列表展开不同cell
111 0
TableView列表展开不同cell
|
iOS开发
iOS开发 - UITableView的tableHeaderView注意事项(遮挡cell,内容重复等等)
iOS开发 - UITableView的tableHeaderView注意事项(遮挡cell,内容重复等等)
364 0
Cell里面10个cell只想展示6条
Cell里面10个cell只想展示6条
123 0
Cell里面10个cell只想展示6条