iOS-Swift-递归计算Cell高度

前言

因为最近工作有需求要用到这个功能,但是我工程已经决定用OC写了,所以手痒写个swift版,本章博客用到很多上一篇博客的东西,还运用了一小步递归,所以有不明白的可以去看一看我的上一篇博客.


上代码

先创建一个plist写假数据

iOS-Swift-递归计算Cell高度_第1张图片

然后创建一个Cell

iOS-Swift-递归计算Cell高度_第2张图片

创建一个Model.swift写以下代码

import UIKit

class Model: NSObject {
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        return;
    }
    // 传入字符串计算行数
    func PassStringReturnIndex(str:String)->Int {
        // 比较值
        let rangeStr = "\n"
        // 比较
        let range = str.rangeOfString(rangeStr)
        // 如果有结果
        if range != nil {
            // 行数+1
            line++
            // 从比较结尾进行切割字符串
            let str2 = str.substringFromIndex(range!.endIndex)
            // 递归调用函数
            PassStringReturnIndex(str2)
        }
        return line
    }
    override func setValue(value: AnyObject?, forKey key: String) {
        super.setValue(value, forKey: key)
        // 当赋值Comment时计算行高
        if key == "comment" {
            // plist里写的\n都为\\n 这里替换成\n
            comment = (value as!String).stringByReplacingOccurrencesOfString("\\n", withString: "\n")
            // 调用计算行高函数
            line = PassStringReturnIndex(comment)
        }
    }
    // 属性
    var title:String = ""
    var writer:String = ""
    var comment:String = ""
    var line:Int = 0
}

最后再ViewController.swift加入以下代码:

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!
    var modelArr:NSMutableArray = []
    override func viewDidLoad() {
        super.viewDidLoad()
        // model赋值
        loadModel()
        // 搭建tableView
        layoutTableView()
    }
    func layoutTableView(){
        // 注册Cell
        tableView.registerNib(UINib.init(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "abc")
    }
    func loadModel(){
        // 从plist重给model赋值
        let path = NSBundle.mainBundle().pathForResource("DataList", ofType: "plist")
        let dataArr = NSArray(contentsOfFile:path!)
        for d in dataArr! {
            // KVC
            let dic:Dictionary = d as! Dictionary
            let model = Model()
            model.setValuesForKeysWithDictionary(dic)
            modelArr.addObject(model)
        }

    }
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        let model = modelArr[indexPath.row] as! Model

        return CGFloat(90 + model.line*20);
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1;
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10;
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("abc", forIndexPath: indexPath) as! MyCell
        let model = modelArr[indexPath.row] as! Model
        cell.titleLabel.text = model.title
        cell.writer.text = model.writer
        cell.commentLabel.text = model.comment
        return cell;
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

效果图

iOS-Swift-递归计算Cell高度_第3张图片

github:https://github.com/Lafree317/Swift-CalculateCellHight


本人还是一只小菜鸡,不过是一只热心肠的菜鸡,如果有需要帮助或者代码中有更好的建议的话可以发邮件到[email protected]中,我们一起进步XD

你可能感兴趣的:(iOS)