Добавьте несколько отметок в ячейку в разных разделах и сохраните их состояние в swift ios - PullRequest
0 голосов
/ 25 апреля 2020

В моем приложении у меня есть 5 разделов с некоторыми данными в нем. я хочу поставить галочку, скажем, 2 ячейки в разделе 1, затем 3 ячейки в разделе 2 и так далее одновременно. Множественный выбор в разных разделах в работе и в любой ячейке, отмеченной галочкой в ​​этой ячейке, у меня есть заголовок метки, который я добавляю и сохраняю в пользовательских ошибках, потому что этот заголовок мне нужно показать на предыдущем экране. Теперь, когда я выбрал 2 ячейки из секции 1, 2 ячейки из секции 2 и go, тогда на предыдущем экране отображался только последний заголовок ячейки выбора, что неверно, он должен отображать 4 заголовка с разделенными запятыми кодом, который я написал на предыдущем экране , Не знаю, что делать

Мой код: -

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "allAssetCell", for: indexPath) as! AllAssetCell

        var mainArr = [SymName]()

        if indexPath.section == digitalIndex
        {
            mainArr = isSearch ? filtereddigitalArr : digitalArr
        }
        else if indexPath.section == forexIndex
        {
            mainArr = isSearch ? filteredforexArr : forexArr
        }
        else if indexPath.section == stocksIndex
        {
            mainArr = isSearch ? filteredstocksArr : stocksArr
        }
        else if indexPath.section == cryptoIndex
        {
            mainArr = isSearch ? filteredcryptoArr : cryptoArr
        }
        else if indexPath.section == commoditiesIndex
        {
            mainArr = isSearch ? filteredcommoditiesArr : commoditiesArr
        }
        else if indexPath.section == etfIndex
        {
            mainArr = isSearch ? filteredetfArr : etfArr
        }
        else
        {
            mainArr = isSearch ? (filtereddigitalArr + filteredforexArr + filteredstocksArr + filteredcryptoArr + filteredcommoditiesArr + filteredetfArr) : (digitalArr + forexArr + stocksArr + cryptoArr + commoditiesArr + etfArr)
        }

        cell.lblSymbolsName.text = mainArr[indexPath.row].name
        cell.accessoryType = mainArr[indexPath.row].isSelected ? .checkmark : .none
        return cell
    }


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
        tableView.deselectRow(at: indexPath, animated: true)

        var mainArr = [SymName]()
        var filteredMainArr = [SymName]()

        if indexPath.section == digitalIndex
        {
            if isSearch
            {
                filtereddigitalArr[indexPath.row].isSelected.toggle()
                let selectedNames = filtereddigitalArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                digitalArr[indexPath.row].isSelected.toggle()
                let selectedNames = digitalArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }
        else if indexPath.section == forexIndex
        {
            if isSearch
            {
                filteredforexArr[indexPath.row].isSelected.toggle()
                let selectedNames = filteredforexArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                forexArr[indexPath.row].isSelected.toggle()
                let selectedNames = forexArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }
        else if indexPath.section == stocksIndex
        {
            if isSearch
            {
                filteredstocksArr[indexPath.row].isSelected.toggle()
                let selectedNames = filteredstocksArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                stocksArr[indexPath.row].isSelected.toggle()
                let selectedNames = stocksArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }
        else if indexPath.section == cryptoIndex
        {
            if isSearch
            {
                filteredcryptoArr[indexPath.row].isSelected.toggle()
                let selectedNames = filteredcryptoArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                cryptoArr[indexPath.row].isSelected.toggle()
                let selectedNames = cryptoArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }
        else if indexPath.section == commoditiesIndex
        {
            if isSearch
            {
                filteredcommoditiesArr[indexPath.row].isSelected.toggle()
                let selectedNames = filteredcommoditiesArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                commoditiesArr[indexPath.row].isSelected.toggle()
                let selectedNames = commoditiesArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }
        else if indexPath.section == etfIndex
        {
            if isSearch
            {
                filteredetfArr[indexPath.row].isSelected.toggle()
                let selectedNames = filteredetfArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                etfArr[indexPath.row].isSelected.toggle()
                let selectedNames = etfArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }
        else
        {
            mainArr = digitalArr + forexArr + stocksArr + cryptoArr + commoditiesArr + etfArr
            filteredMainArr = filtereddigitalArr + filteredforexArr + filteredstocksArr + filteredcryptoArr + filteredcommoditiesArr + filteredetfArr

            if isSearch
            {
                filteredMainArr[indexPath.row].isSelected.toggle()
                let selectedNames = filteredMainArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
            else
            {
                mainArr[indexPath.row].isSelected.toggle()
                let selectedNames = mainArr.filter{$0.isSelected}.map{$0.name}
                UserDefaults.standard.set(selectedNames, forKey: "selectedNames")

                if selectedNames.count > 0
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: selectedNames)
                }
                else
                {
                    ApiUtillity.sharedInstance.saveAssetTypeTextUserDefaults(arr: ["All Assets"])
                }
            }
        }

        tableView.reloadRows(at: [indexPath], with: .none)
    }

1 Ответ

0 голосов
/ 25 апреля 2020

вам нужно объявить эти две переменные вне метода didSelect

var mainArr = [SymName]()
var filteredMainArr = [SymName]()

Поскольку при выборе ячейки создается новый массив, а предыдущая отбрасывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...