1. 程式人生 > >MultivaluedSection類在不同Eureka源中不同行為的分析和修正

MultivaluedSection類在不同Eureka源中不同行為的分析和修正

Eureka中含有MultivaluedSection類,用來實現Section的編輯功能,這裡編輯是指:對Row的刪除,排序和插入.

但是本貓發現Eureka在CocoaPods和GitHub中同樣的4.2.0版本,其刪除行為卻不太相同,這可能對新手有所困惑,所以這裡做一些解釋,對自己和別人都有幫助.

這裡所謂的刪除行為不同是指:

  • CocoaPods 4.2.0:啟用編輯模式後,點選Row頭部的圓形刪除按鈕無反應
  • GitHub Demo 4.2.0:可以正常刪除Row

在這裡插入圖片描述

為了測試,將Demo單獨拎出來,然後重新和CocoaPods中的Eureka 4.2.0繫結,結果發現這時也無法觸發刪除功能.

所以應該是Eureka兩個源中的實現有出入.

為了能夠在CocoaPods的Eureka中實現刪除功能,我們必須手動為每個Row建立刪除動作:

for tag in nameList {
   section <<< TextRow {
        $0.placeholder = "Tag Name"
        $0.value = tag
       
        let deleteAction = SwipeAction(style: .destructive, title: "DEL"){action,row,completion in
            //Custom delete code...
            completion?(true)
        }
        $0.trailingSwipe.actions = [deleteAction]
    }
}

注意completion閉包會幫你處理介面上的刪除(實參為true時),所以你只需處理定製的刪除程式碼.

而對於GitHub中的4.2.0來說,你可以不用寫任何刪除動作就可以完成介面上的刪除動作.不過如果我還要完成一些定製的刪除程式碼呢?

這時我們可以通過過載以下方法來完成:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    super.tableView(tableView, commit: editingStyle, forRowAt: indexPath)
    
    if editingStyle == .delete{
        //Custom delete code...
    }
}

至於Eureka兩個源為什麼對於刪除行為有所不同,時間原因沒有細究,感興趣的童鞋可以仔細深入研究.

另外GitHub裡Eureka 4.3.0已經放出,支援iOS 12和Swift 4.2,大家可以下載測試.

感謝觀賞,國慶快樂 ?