Swift - UITableView使用

Demo说明

  • 列表数据从 UI.plist 属性列表文件中获取,类型是 Array
  • 点击列表项,弹出提示
  • 左滑列表项,删除该行

效果图

Swift - UITableView使用_第1张图片

单元格复用机制

在创建列表时,列表单元格样式大多是相同的,所以用到cell 的复用机制

实现方式是初始化创建 UITableView 实例时,这样注册cell:

//注册重用cell
self.tableView?.register(UITableViewCell.self, forCellReuseIdentifier: "swiftCell")

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 方法中:

//获取复用cell,如果没有,自己创建一个新的cell
let cell = tableView.dequeueReusableCell(withIdentifier: "swiftCell", for: indexPath)

示例代码

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    var uiNmaes : [String]?
    var tableView : UITableView?

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //初始化数据,数据从属性列表中获取
        self.uiNmaes = NSArray(contentsOfFile: Bundle.main.path(forResource: "UI", ofType: "plist")!) as? [String]
        print(self.uiNmaes!)

        //创建tableView
        self.tableView = UITableView(frame: self.view.frame, style: UITableViewStyle.plain)
        self.tableView?.delegate = self
        self.tableView?.dataSource = self
        
        //注册重用cell
        self.tableView?.register(UITableViewCell.self, forCellReuseIdentifier: "swiftCell")
        
        self.view.addSubview(self.tableView!)
        
        //创建表头
        let headerFrame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 30)
        let headerLabel = UILabel(frame: headerFrame)
        headerLabel.backgroundColor = UIColor.yellow
        headerLabel.text = "常见UI控件"
        headerLabel.textColor = UIColor.darkGray
        headerLabel.textAlignment = NSTextAlignment.center
        headerLabel.numberOfLines = 0
        headerLabel.lineBreakMode = .byWordWrapping
        headerLabel.font = UIFont.systemFont(ofSize: 18)
        self.tableView?.tableHeaderView = headerLabel
        
    }
    
    // MARK: - UITableView DataSource
    //返回cell行数
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return (self.uiNmaes?.count)!
    }
    
    //返回显示的cell
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //获取复用cell,如果没有,自己创建一个新的cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "swiftCell", for: indexPath)
        cell.accessoryType = .disclosureIndicator
        cell.textLabel?.text = self.uiNmaes?[indexPath.row]
        return cell
    }

    // MARK: - UITableView Delegate
    // cell点击事件
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.tableView?.deselectRow(at: indexPath, animated: true)
        
        let uiName = self.uiNmaes![indexPath.row]
        let alert = UIAlertController(title: "UI控件", message: uiName, preferredStyle: UIAlertControllerStyle.alert)
        let okAction = UIAlertAction(title: "确定", style: .default, handler: nil)
        alert.addAction(okAction)
        
        self.present(alert, animated: true, completion: nil)
 
    }
    
    //左滑删除cell实现
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        print("删除第\(indexPath.row+1)行")
        self.uiNmaes?.remove(at: indexPath.row)
        self.tableView?.deleteRows(at: [indexPath], with: UITableViewRowAnimation.fade)
        
    }
    
    //左滑删除
    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
        return UITableViewCellEditingStyle.delete
    }
    
    //修改左滑显示的文字
    func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
        return "删删"
    }

}

你可能感兴趣的:(Swift - UITableView使用)