UITableView --Swift

小毅哥哥發表於2017-08-22

一. 在 ViewController 中新增 UITableView

1. 建立一個 UIViewcontroller 檔案

//
//  RefreshVC.swift
//  網路請求Demo
//
//  Created by ZE KANG on 2017/8/21.
//  Copyright © 2017年 LRY. All rights reserved.
//

import UIKit

import Alamofire

var kSize=UIScreen.main.bounds;

var dataTable:UITableView!
var itemStringArr=["企劃部","軟體部","諮詢部","人事部","後勤部","產品部"]


class RefreshVC: UIViewController,UITableViewDelegate,UITableViewDataSource {

    var titleArr = Array<String>();
    var picArr = [String]();

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        initUI();
        methodForSwift();

    }

    func initUI() -> Void {
        self.title = "重新整理"
        self.view.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1);


    }

    //MARK:- Networking
    /// Swift 的 Alamofire
    func methodForSwift() -> Void {
        //        let urlStr = "\(SERVICE_URL)type=\(TOP)&key=\(APPKEY)"

        let parameters = [
            "pag": "2",
            "id": "144f248abf9789911c8ab1e903ec0f10"
        ]
        Alamofire.request(kUrl, method: .post, parameters: parameters).responseJSON { (returnResult) in
            print("secondMethod --> 引數 --> returnResult = \(returnResult.value as Any)")


            //字典接收 JSon 資料
           let dataDict = returnResult.value as! [String : Any] ;
            //從字典中根據 key 提取 value 為陣列的資料
            let dataArr = dataDict["data"] as! [Any];
            for dic in dataArr{
                print("title 數值: ",dic);
                //從陣列中提取字典
                let anDict = dic as! [String : Any];
                //從字典中提值
                let userFaceStr = anDict["userFace"] as! String ;
                print("提取單個圖片=地址: ",userFaceStr);
                let picStr = anDict["userFace"] as! String ;
                let titleStr = anDict["title"] as! String ;

                self.titleArr.append(titleStr);
                self.picArr.append(picStr);
            }
//             print("title 數租: ",self.titleArr);
            //主執行緒重新整理 UI
            DispatchQueue.main.async {
                 self.makeTable();
                 self.forInArrayHandel();
            }
        }
    }

   //MARK:- forIn 陣列
    func forInArrayHandel() -> Void {
        for title in self.titleArr{
             print("title 數值: ",title);
        }
    }

    // MARK:- 建立table
    func makeTable (){

        dataTable=UITableView.init(frame: CGRect(x: 0.0, y: 64, width: kSize.width, height: kSize.height-64), style:.plain)
        dataTable.backgroundColor = UIColor.groupTableViewBackground;
        dataTable.delegate=self;//實現代理
        dataTable.dataSource=self;//實現資料來源
        dataTable.showsVerticalScrollIndicator = false
        dataTable.showsHorizontalScrollIndicator = false
        self.view.addSubview(dataTable)


        //tableFooter
        dataTable.tableFooterView = UIView.init()

        //MARK:註冊 xib Cell(沒有 xib)
//        dataTable .register(RefreshCell.classForCoder(), forCellReuseIdentifier: "identti")

        //MARK:註冊 xib Cell(使用 xib)
        let cellNib = UINib(nibName: "RefreshCell", bundle: nil)
        dataTable.register(cellNib, forCellReuseIdentifier: "identti")
    }

    // MARK: -table代理

    //段數
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1;
    }

    //行數
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//        return itemStringArr.count
        return self.titleArr.count;
    }

    //行高
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
        return 80
    }

    /*
     //頭部高度
     func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return 0.01
     }

     //底部高度
     func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
     return 0.01
     }
     */

    //cell
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        /*
         let indentifier = "CellA"
         var cell:TableViewCellA! = tableView.dequeueReusableCell(withIdentifier: indentifier) as? TableViewCellA
         if cell == nil {
         cell=TableViewCellA(style: .default, reuseIdentifier: indentifier)
         }


         return cell!
         */

        //MARK: 沒有建立 TabelViewCell 檔案,直接在本 VC 中複用
        /*
        let identifier="identtifier";
        var cell=tableView.dequeueReusableCell(withIdentifier: identifier)
        if(cell == nil){
            cell=UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: identifier);
        }


          cell?.textLabel?.text = self.titleArr[indexPath.row];
        cell?.detailTextLabel?.text = "待新增內容";
        cell?.detailTextLabel?.font = UIFont .systemFont(ofSize: CGFloat(13))
        cell?.accessoryType=UITableViewCellAccessoryType.disclosureIndicator   //右邊小箭頭

        return cell!
         */

        //MARK:另外建立了 TabelViewCell 檔案
        let cell:RefreshCell = tableView.dequeueReusableCell(withIdentifier: "identti", for: indexPath) as! RefreshCell
         cell.titleLabel?.text = self.titleArr[indexPath.row];
        //定義URL物件
        let url = URL(string:  self.picArr[indexPath.row])
        //從網路獲取資料流
        let data = try! Data(contentsOf: url!)
        //通過資料流初始化圖片
        let newImage = UIImage(data: data)
        cell.picImg.image = newImage;
        print("圖片: ",self.picArr[indexPath.row])

        return cell;
    }

    //選中cell時觸發這個代理
    public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
        print("indexPath.row = SelectRow第\(indexPath.row)行")
    }

    //取消選中cell時,觸發這個代理
    public func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath){
        print("indexPath.row = DeselectRow第\(indexPath.row)行")
    }

    //允許編輯cell
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    //右滑觸發刪除按鈕
    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
        return UITableViewCellEditingStyle.init(rawValue: 1)!
    }

    //點選刪除cell時觸發
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        print("indexPath.row = editingStyle第\(indexPath.row)行")

    }


}

2. 建立 UITableViewCell 檔案

//
//  RefreshCell.swift
//  網路請求Demo
//
//  Created by ZE KANG on 2017/8/21.
//  Copyright © 2017年 LRY. All rights reserved.
//

import UIKit



class RefreshCell: UITableViewCell {








    @IBOutlet weak var titleLabel: UILabel!

    @IBOutlet weak var picImg: UIImageView!

    //MARK:- 沒有建立xib 檔案初始化方法
    /*
    override init(style: UITableViewCellStyle, reuseIdentifier: String?){

        super . init(style: style, reuseIdentifier: reuseIdentifier)

//        self.contentView .addSubview(self.titleLable)
    }

    //懶載入label
    lazy var  titleLable:UILabel = {
        let  titleLable =  UILabel(frame:CGRect.init(x: 100, y: 0, width: 100, height: 30))
        print("----------888")
        titleLable.backgroundColor = .green
        titleLable.textAlignment = NSTextAlignment.center
        return titleLable

    }( )

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

     */
    // MARK:- 建立了 xib 的所使用的方法
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        //此處寫 xib 的初始化程式碼

    }


    //懶載入label


    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        self.picImg.backgroundColor = UIColor.yellow;
    }

}

3. 要點:

P1. 在 VC 中

  • 直接複用

UITableView --Swift

  • 有建立 xib 的 cell

UITableView --Swift   UITableView --Swift

  • 沒有 xib 的 cell
    UITableView --Swift   UITableView --Swift

P2: 在 TabelViewCell 中

  • xib拖控制元件
    UITableView --Swift

  • 沒xib拖控制元件
    UITableView --Swift



效果圖:

UITableView --Swift

相關文章