Как навсегда удалить строку из табличного представления в Swift? - PullRequest
0 голосов
/ 21 июня 2020

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

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var countries = ["India","Canada", "USA","Russia","Dubai"]
   
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return countries.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = countries[indexPath.row]
    return cell
}

//to enable delete action by swiping left
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete{
        countries.remove(at: indexPath.row)
        tableView.reloadData()
    }
}

@IBOutlet weak var userTxt: UITextField!

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
    let obj = UserDefaults.standard.object(forKey: "userKey") as? String
    if let userName = obj {
        userTxt.text = userName
    }
    
}


@IBAction func savePressed(_ sender: UIButton) {
    //we use this to save data
    UserDefaults.standard.set(userTxt.text, forKey: "userKey")
}

    @IBAction func deletePressed(_ sender: UIButton) {
        UserDefaults.standard.removeObject(forKey: "userKey")
    }
}

мой код

Ответы [ 2 ]

3 голосов
/ 21 июня 2020

Вы должны сохранить измененный массив стран, чтобы сохранить внесенные вами изменения. Вот что вам нужно сделать:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    //...
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            countries.remove(at: indexPath.row)
            UserDefaults.standard.set(countries, forKey: "countries")
            tableView.reloadData()
        }
    }
    //...
    override func viewDidLoad() {
        super.viewDidLoad()
        if let array = UserDefaults.standard.array(forKey: "countries") as? [String] {
            countries = array
        } else {
            countries = ["India","Canada", "USA","Russia","Dubai"]
        }
        //...
    }
}
0 голосов
/ 22 июня 2020

Ваша реализация delete не сохраняет изменения, которые вы делаете с помощью delete, поскольку он использует переменную, которая инициализируется каждый раз с данными, которые вы жестко запрограммировали, поэтому массив восстанавливает свои элементы до тех, которые вы указали каждый раз, когда вы проверяете. Поэтому вместо жесткого кодирования значений в массив для заполнения вашего tableView рассмотрите возможность использования постоянного хранилища, такого как база данных или UserDefaults.

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