Swift控件--UITableView、加载plist

UITableView的实现和Object-C一样,

class OneVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var tableView: UITableView!
    var dataArray: Array = []
    let cellID = "CELLID"
    //判断是否在编辑状态
    var isEdit = false
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white
        self.title = "首页"
        
        //数据源
        dataArray = DataModel.modelDatas()
        
        //添加编辑按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "编辑", style: UIBarButtonItemStyle.done, target: self, action: #selector(OneVC.rightClick))
        
        //创建UITableView
        tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
        //注册cell
        tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: cellID)
        //设置代理
        tableView.delegate = self
        tableView.dataSource = self
        //设置行高
        tableView.rowHeight = 60
        
        view.addSubview(tableView)
        
        //去掉没有数据的cell的分割线
        tableView.tableFooterView = UIView()
        
    }
    //导航栏右边的按钮
    func rightClick() -> Void {
        isEdit = !isEdit
        tableView.setEditing(isEdit, animated: true)
    }
    
    /* UITableView的代理方法和数据源方法*/
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //创建cell
        let cell = tableView.dequeueReusableCell(withIdentifier: cellID)! as UITableViewCell
        //h获取模型数据
        let model: DataModel = dataArray[indexPath.row]
        cell.textLabel?.text = model.name
        cell.imageView?.image = UIImage(named: model.icon!)
        cell.detailTextLabel?.text = model.center
        return cell
    }
    //是否允许打开编辑状态
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    
    //删除某行的cell
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        self.dataArray.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.top)
    }
    
    //允许滑动删除
    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
        return UITableViewCellEditingStyle.delete
    }
    
    //选择cell
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let model = dataArray[indexPath.row]
        
        let alertController = UIAlertController(title: model.name, message: model.center, preferredStyle: UIAlertControllerStyle.alert)
        let alerAction = UIAlertAction(title: "确定", style: UIAlertActionStyle.default, handler: nil)
        alertController.addAction(alerAction)
        self.present(alertController, animated: true, completion: nil)
    }
}

加载plist文件

class DataModel: NSObject {
    var name: String?
    var icon: String?
    var center: String?
    var time: String?
    
    init(dict: [String: AnyObject]) {
        //KVC是OC特有的机制 oc可以和swift共存
        //在运行时 给‘对象’ 转发setValue: forKey:
        //KVC 通过键值编码 给对象的属性设置初始值
        super.init()
        setValuesForKeys(dict)
    }
    
    public static func modelDatas() -> Array {
        var dataArray = Array()
        let plistPath = Bundle.main.path(forResource: "datas", ofType: "plist")
        let datas = NSArray(contentsOfFile: plistPath!) as! Array
        //KVC
        for dict in datas {
            let model = DataModel(dict: dict as! [String : AnyObject])
            dataArray.insert(model, at: dataArray.count)
        }
        return dataArray
    }
}

Swift中表示“类型范围作用域”这一概念有两个不同的关键字,它们分别是static和class。这两个关键字都表达了这个意思,类可以通过static关键字拥有类型存储属性了,static相当于class final标识符的别名,勒种的static属性拥有全局作用域和依赖加载属性,但目前class还不能用来定义类型的存储属性,仅能通过class定义类型计算属性

class MyClass {
     class var bar: Bar?
}

编译时就会出现class variables not yet supported的错误这主要是因为Objective-C中就没有类型变量的概念,为了运行时的同意和兼容,暂时没有添加这个特性

你可能感兴趣的:(Swift控件--UITableView、加载plist)