Swift: - Увеличить значение метки на 1 при нажатии кнопки в пользовательской ячейке таблицы - PullRequest
0 голосов
/ 31 октября 2018

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

     var counts = 0

    @IBAction func addPressed(_ sender: UIButton) {
    let indexPath = IndexPath(row: sender.tag, section: 0)
    let cell = tblview.cellForRow(at: indexPath) as! HomeDetailsTableViewCell
    counts = (counts + 1)
    cell.lblNoOfItems.text = "\(counts)"
}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

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

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

//Suppose this is your tableivew data source
let list : [String] = ["Title1","Title2","Title3"]

//Make a dictionary that is going to be your datasource of tableview holding the count too
var listDict : [[String:Any]] = []
for item in list{
    let dict : [String:Any] = ["title":item,"count":Int(0)]
    listDict.append(dict)
}

//Where you are performing the actions like in didSelectRow or in any button
let cellIndexPath : IndexPath = IndexPath(item: 0, section: 0) // Get the indexPath of Cell

//Update the count
if let count = listDict[cellIndexPath.row]["count"] as? Int{
    let newValue = count + 1
    listDict[cellIndexPath.row]["count"] = newValue
}

//Reload the tableview cell of update manually your choice I'm reloading the cell for short
let tableview = UITableView()
tableview.reloadRows(at: [cellIndexPath], with: .fade)
0 голосов
/ 31 октября 2018

Для этого может быть 2 способа:

1. Держите счетчик каждой ячейки в Array на уровне controller, и каждый раз, когда вы нажимаете button, получите счетчик из массива и используйте его, то есть

var counts = [Int](repeating: 0, count: 10) //10 is the number of cells here

@IBAction func addPressed(_ sender: UIButton) {
    let indexPath = IndexPath(row: sender.tag, section: 0)
    let cell = tblview.cellForRow(at: indexPath) as! HomeDetailsTableViewCell
    counts[indexPath.row] += 1
    cell.lblNoOfItems.text = "\(counts[indexPath.row])"
}

2. Сохраните счет каждой ячейки в самой настраиваемой ячейке, т.е. в HomeDetailsTableViewCell, т.е.

class HomeDetailsTableViewCell: UITableViewCell {
    var count = 0
    //Rest of the code...
}

@IBAction func addPressed(_ sender: UIButton) {
        let indexPath = IndexPath(row: sender.tag, section: 0)
        let cell = tblview.cellForRow(at: indexPath) as! HomeDetailsTableViewCell
        cell.count += 1
        cell.lblNoOfItems.text = "\(cell.count)"
}

Кроме того, способ реализации кода для добавления + button неверен. Вы должны реализовать его внутри самого HomeDetailsTableViewCell, т.е.

class HomeDetailsTableViewCell: UITableViewCell {
    @IBOutlet weak var lblNoOfItems: UILabel!
    var count = 0

    @IBAction func addPressed(_ sender: UIButton) {
        self.count += 1
        self.lblNoOfItems.text = "\(self.count)"
    }
    //Rest of the code...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...