Ios 当选定段时,如何从表视图加载选定数据?

Ios 当选定段时,如何从表视图加载选定数据?,ios,swift,uitableview,tableview,uisegmentedcontrol,Ios,Swift,Uitableview,Tableview,Uisegmentedcontrol,我想知道如何从表视图加载所选数据,例如,当选择“段索引等于1”时,表视图将重新加载,并且只显示状态等于“已批准”的数据。因为正如您从我下面的代码中看到的,我已经加载了所有状态的所有数据:。例如,如果segmentView.selectedSegmentIndex==1,表将重新加载状态为“已批准”的数据。我已经可以确定所选的索引了。我想要的是如何从表视图访问这些数据,我可以根据状态加载所选数据 func tableView(_ tableView: UITableView, cellForRow

我想知道如何从表视图加载所选数据,例如,当选择“段索引等于1”时,表视图将重新加载,并且只显示状态等于“已批准”的数据。因为正如您从我下面的代码中看到的,我已经加载了所有状态的所有数据:。例如,如果segmentView.selectedSegmentIndex==1,表将重新加载状态为“已批准”的数据。我已经可以确定所选的索引了。我想要的是如何从表视图访问这些数据,我可以根据状态加载所选数据

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // Table view cells are reused and should be dequeued using a cell identifier.
        let cellIdentifier = "ToDoListTableViewCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ToDoListTableViewCell
        cell.delegate = self


//        let toDoActionItem = fetchedResultsController.object(at: indexPath)

        if let getTempDetails: [String : Any] = getAllDetail[indexPath.row] {
            print("ang tanan data:" , getTempDetails)
            if let str = getTempDetails["status"] as? [String: String] {
                if let name = str["name"] {
                    if name == "ongoing" {
                        cell.toDoItemLabel.text = getTempDetails["name"] as? String
                        cell.statuslabel.backgroundColor = created
//                        cell.label.textColor =  UIColor(red: 0.9294, green: 0.3333, blue: 0.1804, alpha: 1.0)
//                        cell.backgroundColor = created


                    }
                    else if name == "approved" {
                       cell.toDoItemLabel.text = getTempDetails["name"] as? String
                       cell.statuslabel.backgroundColor = done
                       cell.checkBoxButton.isSelected =  true
                    }
                    else if name == "for approval" {
                        cell.toDoItemLabel.text = getTempDetails["name"] as? String
                        cell.statuslabel.backgroundColor = pending
                    }else if name == "near expiry" {
                       cell.toDoItemLabel.text = getTempDetails["name"] as? String
                        cell.statuslabel.backgroundColor = neardue
                    } else if name == "expired" {
                        cell.toDoItemLabel.text = getTempDetails["name"] as? String
                        cell.statuslabel.backgroundColor = expired
                    } else {
                        print("false")
                       cell.toDoItemLabel.text = "LOLS"
                    }
                }
                }
            }



    code for segment (in selecting segment)

    func selectSegmentInSegmentView(segmentView: SMSegmentView) {

        if segmentView.selectedSegmentIndex == 1 {
            print("ang index nga emo ge click is one")
            //            let selectedSegment : SMSegment = segmentView.selectedSegment!
            //            self.userName = selectedSegment.label.text!

        } else {

            logic here
        }
        self.setUpTableView()
or could be self.tableView.reloadData()
    }

有关选定索引的筛选器数组(状态):


选择
UISegmentControl
的不同段时,只需创建5个单独的数组即可加载

var ongoingArr = [[String: Any]]() // For segment index 0
var approvedArr = [[String: Any]]() // For segment index 1
var forApprovalArr = [[String: Any]]() // For segment index 2
var nearExpiryArr = [[String: Any]]() // For segment index 3
var expiredArr = [[String: Any]]() // For segment index 4
您拥有整个数据
getAllDetail
,并且您通过API或上一屏幕获取此数组中的数据:

var getAllDetail = [[String: Any]]()
如果您是从API获取数据,那么在
getAllDetail
中加载数据后,再加载5个以上的数组。仅创建数组扩展的Fo,如下所示:

和,加载超过5个阵列:

func loadSegmentArray() {

    ongoingArr = getAllDetail.filterArray("ongoing")
    approvedArr = getAllDetail.filterArray("approved")
    forApprovalArr = getAllDetail.filterArray("for approval")
    nearExpiryArr = getAllDetail.filterArray("near expiry")
    expiredArr = getAllDetail.filterArray("expired")

    // Select 0th index of segment and reload table
    segmentView.selectedSegmentIndex = 0
    self.setUpTableView() // Reload Table view
}
在func
中选择SegmentInsegmentView
,只需重新加载表视图:

func selectSegmentInSegmentView(segmentView: SMSegmentView) {
    self.setUpTableView()
}
并根据这5个数组更新您的
UITabelView
委托和数据源方法

对于示例,我正在编写
numberOfRowsInSection
cellForRowAt indexPath

func loadSegmentArray() {

    ongoingArr = getAllDetail.filterArray("ongoing")
    approvedArr = getAllDetail.filterArray("approved")
    forApprovalArr = getAllDetail.filterArray("for approval")
    nearExpiryArr = getAllDetail.filterArray("near expiry")
    expiredArr = getAllDetail.filterArray("expired")

    // Select 0th index of segment and reload table
    segmentView.selectedSegmentIndex = 0
    self.setUpTableView() // Reload Table view
}

最好的选择是:

func loadSegmentArray() {

    ongoingArr = getAllDetail.filterArray("ongoing")
    approvedArr = getAllDetail.filterArray("approved")
    forApprovalArr = getAllDetail.filterArray("for approval")
    nearExpiryArr = getAllDetail.filterArray("near expiry")
    expiredArr = getAllDetail.filterArray("expired")

    // Select 0th index of segment and reload table
    segmentView.selectedSegmentIndex = 0
    self.setUpTableView() // Reload Table view
}
制作一个用于显示的公共
数组
,该数组将用于在
表格视图
中显示数据:

在所有情况下,如:

制作一个如下的通用函数:

   func filterDataStatusWise(strStatus:String){

    for dict in arrMainResponse{

        let strStatus = arrMainResponse["status"]

        if strStatus["name"] = strStatus{
            //Whatever data add in arrForDisplay here
        }

        tableView.reloadData()
    }
}
var arrForDisplay = [String:Any]()

if condition1{
        filterDataStatusWise(strStatus: "ongoing")
    }else if condition2{
        filterDataStatusWise(strStatus: "approved")
    }else if condition3{
        filterDataStatusWise(strStatus: "for approval")
    }else if condition4{
        filterDataStatusWise(strStatus: "near expiry")
    }else{
        filterDataStatusWise(strStatus: "expired")
    }
然后像这样使用它:

   func filterDataStatusWise(strStatus:String){

    for dict in arrMainResponse{

        let strStatus = arrMainResponse["status"]

        if strStatus["name"] = strStatus{
            //Whatever data add in arrForDisplay here
        }

        tableView.reloadData()
    }
}
var arrForDisplay = [String:Any]()

if condition1{
        filterDataStatusWise(strStatus: "ongoing")
    }else if condition2{
        filterDataStatusWise(strStatus: "approved")
    }else if condition3{
        filterDataStatusWise(strStatus: "for approval")
    }else if condition4{
        filterDataStatusWise(strStatus: "near expiry")
    }else{
        filterDataStatusWise(strStatus: "expired")
    }

希望有帮助

您的问题是关于只过滤“已批准”/“已过期”还是关于TableView?我将使用一个“selectedDetailsArray”,它将根据segmentedControl选项过滤
getAllDetail
,并且只对数据源(numberOfRows、cellForRow等)使用这个选项我想要的是例如segmentView.selectedSegmentIndex==1表将加载状态等于approved的数据。例如,段控制中是否有5个段,分别命名为Continuous、approved、ForApproval、near Expire和expired?是的索引数等于status@DurnKurvirck你能再解释一下代码吗。?昨天的聊天我们可以在这里讨论我正在从一个API获取数据作为对API的响应,加载
getAllDetail
首先,然后调用一个方法,加载所有5个数组并将选定的段索引设置为0,然后重新加载表你能打开聊天吗,因此,我可以通过这里澄清我创建了一个函数
loadSegmentArray
在加载
getAllDetail
后调用此函数以响应API成功。我找不到聊天选项,我对堆栈溢出有点陌生。嘿,先生,你在吗?@DurnKurvirck我回到聊天区,我们可以继续