Как обновить определенную ячейку в табличном представлении и сохранить измененные данные, чтобы потом показывать их в том же табличном представлении - PullRequest
1 голос
/ 21 июня 2019

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

let indexPathRow:Int = self.toreloadindexint 
let indexPosition = IndexPath(row: indexPathRow, section: 0)                                           
self.tablall.reloadRows(at: [indexPosition], with: .fade)
//......tableview cell data for reload data that i get from api..........
       if updateintoflike == 0
        {
            // print("after updation on cell count",self.toreloadindexint)
            var favcounts = arrayfeedwebcounts[indexPath.row] as! Int //"data"
            lblfav?.text = "0"//String(favcounts)
            favcounts = 0
            print("fav..", lblfav?.text)
        }
        else
        {
           // print("after updation on cell count",self.toreloadindexint)
            lblfav?.text = ""

            var row: Int = indexPath.row
            arrayfeedwebcounts.remove(at: row)
            arrayfeedwebcounts.insert(updateintoflike as AnyObject, at:row)
            var addedcontt = arrayfeedwebcounts[indexPath.row] as! NSNumber
            lblfav?.text = String(updateintoflike)
            print("label fav..", lblfav?.text)
       }

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Вам необходимо поддерживать состояние вашего UITableViewCell в вашей tableView's dataSource модели. Я попытаюсь уточнить это на примере.

1. Предположим, вы model выглядите примерно так:

class Post {
    var isLiked = false
    var likeCount = 0
}

2. Далее необходимо создать пользовательский UITableViewCell таким образом, чтобы он изменял dataSource и UI согласно действию button , т.е.

class CustomCell: UITableViewCell {
    @IBOutlet weak var countLabel: UILabel!
    @IBOutlet weak var likeButton: UIButton!

    var post: Post?

    func configure(with post: Post) {
        countLabel.text = "\(post)"
        likeButton.isSelected = post.isLiked
    }

    @IBAction func likeButtonTapped(_ sender: UIButton) {
        sender.isSelected = !sender.isSelected
        if let post = post {
            post.isLiked = sender.isSelected
            if sender.isSelected {
                post.likeCount += 1
            } else {
                post.likeCount -= 1
            }
            countLabel.text = "\(post.likeCount)"
        }
    }
}

3. Наконец, методы UITableViewDataSource будут,

class VC: UIViewController, UITableViewDataSource {
    var posts = [Post]()

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return posts.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
        cell.configure(with: posts[indexPath.row])
        return cell
    }
}

В приведенном выше коде при каждом нажатии likeButton обновляются UI и dataSource. Таким образом, всякий раз, когда cell отображается снова, вы автоматически увидите последние обновленные данные.

Нет необходимости перезагружать tableView или cell при каждом нажатии likeButton. Перезагрузка приведет только к дополнительным накладным расходам.

0 голосов
/ 21 июня 2019

Решение 1: -

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)

, если оно не работает, попробуйте это

 self.tableView.beginUpdates()
 let indexPath = NSIndexPath.init(row:  self.selectedTag, section: 0)     
 self.tableView.reloadRows(at: [indexPath], with: .automatic)
 self.tableView.endUpdates()

Если это не работает, пожалуйста,комментарий, поэтому я тоже проверяю.

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