iOS-Swift-Plist-KVC

作者: 轩辕小羽 | 来源:发表于2015-12-05 18:13 被阅读410次

    前言

    最近被swift深深的迷住了,但是不知道写点什么好,就从基础的开始写吧.
    本篇博客主要内容是 从Plist中加载数据,自定义cell,KVC等

    上代码

    创建一个DataList.plist内容如下

    DataList.plist

    再创建一个Model类Model.swift

    import UIKit
    class Model: NSObject {
        // 如果数据中有值但是这里没有的话走这个方法把值弃掉
        override func setValue(value: AnyObject?, forUndefinedKey key: String) {
            return ;
        }
        // 姓名
        var name:String = ""
        // 年龄
        var age:String = ""
        // 详情
        var content:String = ""
    }
    

    在StoryBoard中创建tableView并关联属性和代理数据源等

    关联代理和数据源

    然后创建MyCell.swift 并创建Xib:

    MyCell.xib
    import UIKit
    
    class MyCell: UITableViewCell {
        // 姓名
        @IBOutlet weak var nameLabel: UILabel!
        // 年龄
        @IBOutlet weak var ageLabel: UILabel!
        // 详情
        @IBOutlet weak var detailLabel: UILabel!
        override func awakeFromNib() {
            super.awakeFromNib()
            // Initialization code
        }
        override func setSelected(selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
    
            // Configure the view for the selected state
        }
    }
    

    然后在ViewController.swift中写入以下代码

    import UIKit
    
    class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
        @IBOutlet weak var tableView: UITableView!
        var modelArr:NSMutableArray = []
        override func viewDidLoad() {
            // 封装方法
            layoutView()
        }
        func layoutView(){
            // 注册cell
            tableView.registerNib(UINib.init(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "myCell")
            // 取出Plist url
            let fileUrl = NSBundle.mainBundle().URLForResource("DataList", withExtension: "plist")
            // 到出数组
            let dataArr = NSArray(contentsOfURL: fileUrl!)
            // 快速遍历出数组中的字典
            for dic in dataArr!{
                // 创建对象
                let model = Model()
                // 将快速枚举值进行类型转换
                let dica:Dictionary<String,AnyObject> = dic as! Dictionary
                
                // 数据转模型
                model.setValuesForKeysWithDictionary(dica)
    
                // 添加入数组中
                modelArr.addObject(model)
            }
        }
        // 区数
        func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1;
        }
        // 行数
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return modelArr.count;
        }
        // cell
         func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            // 重用
            let cell:MyCell =  tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! MyCell
            // 取消选中变黑
            cell.selectionStyle = UITableViewCellSelectionStyle.None
            // 取出对象
            let model = modelArr[indexPath.row] as! Model
            // 赋值
            cell.nameLabel.text = model.name
            cell.ageLabel.text = model.age
            cell.detailLabel.text = model.content
            return cell
        }
        
        func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            return 121;
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    

    效果图:

    swift-Plist-Kvc.gif

    github:https://github.com/Lafree317/Swift-Plist-KVC


    复杂一点的

    字典数组嵌套
    let fileUrl = NSBundle.mainBundle().URLForResource("DetailList", withExtension: "plist")
            if let url = fileUrl {
    
                
                let Dic = NSDictionary(contentsOfURL: url)
                
                for (key,value) in Dic!{
                    
                    
                    let valueArr:NSMutableArray! = []
                    for dic in value as! NSArray {
                        let model = CreatDetailModel()
                        model.setValuesForKeysWithDictionary(dic as! [String : AnyObject])
                        valueArr.addObject(model)
                    }
                    dataDic.setValue(valueArr, forKey: key as! String)
                }
            }
    

    相关文章

      网友评论

      本文标题:iOS-Swift-Plist-KVC

      本文链接:https://www.haomeiwen.com/subject/afoshttx.html