zoukankan      html  css  js  c++  java
  • 优化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!
        }
    }

    细节

  • 相关阅读:
    linux 统计文件行数的命令效率
    使用mysqldump导入不成功解决方法
    shell中获取当前目录
    shell读取文档中的命令并执行
    读取文件,文件内容包含空格Tab和回车提取想要的数据
    ls命令中的--time-style使用
    Vmware中网卡未启用,安装系统后再启用网卡,eth0如何设置
    lvm逻辑卷扩展方法
    linux小技巧 一
    解决ARCGIS10.2与VS2013不兼容
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4845087.html
Copyright © 2011-2022 走看看