美文网首页swift
Swift控件--UITableView、加载plist

Swift控件--UITableView、加载plist

作者: KallyKello | 来源:发表于2016-10-21 16:26 被阅读0次

    UITableView的实现和Object-C一样,

    class OneVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
        
        var tableView: UITableView!
        var dataArray: Array<DataModel> = []
        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<DataModel> {
            var dataArray = Array<DataModel>()
            let plistPath = Bundle.main.path(forResource: "datas", ofType: "plist")
            let datas = NSArray(contentsOfFile: plistPath!) as! Array<NSDictionary>
            //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

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