顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [Xcode][Swift3] TableView 加上"載入更多"按鈕
時間 2017-04-13 Thu. 22:44:39


依照這篇 [Xcode][Swift3] 使用 Alamofire 存取網站資料 - KnucklesNote板 - Disp BBS
的方法,再加一個看板列表頁

在看板列表的 TableView 中,預設載入了 20 筆資料
當滑動到底時,想要顯示一個「載入更多」的按鈕
點了以後會再多載入 20 筆資料

在 TableView 設定 Prototype Cells 的數量為 2
[圖]


第二個 Cell 的 Identifier 輸入「BoardListMoreCell」
[圖]

將 Style 改為「Basic」,將 Label 的文字改為「點此載入更多」
自訂類別使用預設的 UITableViewCell


修改看板列表的類別程式檔

用來存列表資料的陣列設定為
    var boardListArray:[Any] = []
一開始先設為空的陣列

加上成員變數
    var numPageLoad: Int = 0
記錄已載入了幾頁

修改從網路載入資料的成員函數 loadData()
將 numPageLoad 加入網址參數,用來讀取要載入哪一頁的資料

將讀取到的資料使用 append 的方式加入 boardListArray
然後將 numPageLoad 加 1,呼叫 TableView 重載資料
例如
        if let blist = data["blist"] as? [Any] {
            self.boardListArray.append(contentsOf: blist)
            self.numPageLoad += 1
            self.tableView.reloadData()
        }

修改 tableView(_:numberOfRowsInSection:) 的內容為
        var num: Int = 0
        if self.boardListArray.count > 0 {
            num = self.boardListArray.count + 1
        }
        return num
當 boardListArray 有值時,要多顯示一列,用來當載入更多的按鈕

修改 tableView(_:cellForRowAt:) 的內容為
        if indexPath.row < self.boardListArray.count {

            // 原本的內容

        } else {
            let cell = tableView.dequeueReusableCell(withIdentifier: "BoardListMoreCell", for: indexPath)
            // 可以在這修改按鈕的顯示的文字
            cell.textLabel?.text = "已載入 \(self.numPageLoad) 頁,點此載入更多"
            return cell
        }

加上成員函數 tableView(_:didSelectRowAt:)
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.row == self.boardListArray.count {
            loadData()
        }
    }
設定點擊「載入更多」那一列時,執行 loadData()




--
※ 作者: Knuckles 時間: 2017-04-13 22:44:39
※ 編輯: Knuckles 時間: 2017-04-13 23:00:15
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 227 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇