如何在tableviewcell中保存所选项目

Posted

技术标签:

【中文标题】如何在tableviewcell中保存所选项目【英文标题】:How to save selected item in tableviewcell 【发布时间】:2020-02-17 07:35:15 【问题描述】:

我想问一下如何将选定的所有项目保存在 tableViewCell 中,如下图所示。所以以后我可以用 alamofire 发布它,我以前没有发布数据的经验。这就是我所做的。

这是我的按钮,因此我可以稍后使用 alamofire 发布,目前我想对其进行测试。

    @objc func handleSubmit() 
        var data: [String] = []
        for (index, value) in attendance.enumerated() 
            print("index attendance: \(index), value attendance: \(value.status)")
            let cell = tableView.cellForRow(at: IndexPath(item: index, section: 0)) as? GStudentAbsenceCell
        UserServices.shared.postUserAttendances(status: cell?.status ?? "")
            data.append(cell?.status ?? String(index))
        
        print(data)
    

// In My UITableViewCell
var status: String?

statusLbl.didSelect  (selectedText , index ,id) in
               if selectedText == "Sakit" || selectedText == "Izin" || selectedText == "Alpha" 
                self.status = selectedText
                   self.statusLbl.backgroundColor = #colorLiteral(red: 0.8666666667, green: 0.4078431373, blue: 0.2705882353, alpha: 0.2)
                   self.statusLbl.textColor = #colorLiteral(red: 0.8666666667, green: 0.4078431373, blue: 0.2705882353, alpha: 1)
               
           

【问题讨论】:

创建单元格模型并根据选择进行存储和加载 好吧你的意思,但是当我存储单元格时。如果我创建单元格模型,我必须在我的发布请求中传递什么参数?抱歉@Vinodh 这是我第一次这样做 【参考方案1】:

您不能将数据模型状态安全地存储在表格视图单元格中,因为在滚动单元格时可能会重复使用新可见的行,因此它将存储不同行的状态,因此会丢失“旧的”状态。

您需要将状态存储在模型中;如果使用现有模型不可行,您可以创建一个临时字典,将IndexPath 映射到state

你可以做的是:

    使用自定义回调处理程序扩展您的 Cell,当状态更改时调用该处理程序。

    当您设置单元格时,请提交一个可以处理这些状态变化的闭包

    在该闭包中,更新模型

一些伪代码可能会对您有所帮助:

// in your custom cell
typealias Handler: (String) -> ()
class CustomTableViewCell : UITableViewCell 
     var selectionHandler:Handler?
     func didSelect(...) 
          selectionHandler?(lblStatus.text)
     



// in your view controller
// in rowForCellatIndexPath:

func  tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell  
     let cell = /* dequeue */ as! CustomTableViewCell

     cell.selectionHandler =  statusText in
          let row = indexPath.row
          attendance[row].status = statusText /* get the status from the cell */
     

     return cell

【讨论】:

对不起@AndreasOetjen 我不明白,这是我第一次这样做。你能给我看看示例代码吗? 好吧,如果你从来没有做过这样的事情,那么要学的东西很多。我会稍微更新一下我的答案,但我不能提供太多代码,因为这需要了解您的项目内部知识。 我明白了,谢谢@AndreasOetjen 我试着逐条理解并用谷歌搜索你的意思。

以上是关于如何在tableviewcell中保存所选项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tableviewcell 中显示选定的日期(在日历中)

如何将所选项目从 QListWidget、QTableWidget 保存到 Qsettings

如何将图像从 TableViewCell 传递到 UIImage

如何更改视图控制器中的标签 我要加载一个 tableviewcell 被选中? [复制]

在 Android BottomNavigationView 中设置所选项目

在 TableViewCell 中保持 UISwitch 的状态:Swift