Значение UIStepper увеличивает случайные числа

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

Это повторно используемая ячейка приложения корзины электронной коммерции. Проблема заключается в UIStepper. У меня может быть любое количество этих ячеек в зависимости от количества элементов, которые пользователь добавляет в корзину. Таким образом, проблема заключается в том, что если я увеличиваю значения степпера ячеек 1,2 и 3. Значение из ячейки 4 будет начинаться с некоторого случайного числа, а не с одного. В настоящее время я читаю значения из файла .plist, создаю модель продукта, сохраняю их в модели и создаю массив моделей продуктов. Данные отображаются из массива. Я создал делегата для получения значений из пользовательской ячейки в контроллер представления. Функция изменения шагового значения показана ниже.

- (IBAction)valueChangedAction:(UIStepper *)sender {
    NSLog(@"sender.value ---------- %f",sender.value);
   self.stepperCount = sender.value;

    self.cartItemQuantityLabel.text=[NSString stringWithFormat:@"%ld",(long)self.stepperCount];
    [self.delegate valueDidChangeStepper:self.stepperCount cellRow:self.cellRow];
}

Реализация функции в View Controller показана ниже.

-(void)valueDidChangeStepper:(NSInteger)valueofStepper cellRow:(NSInteger)cellRow
{
    ProductModel *productModel=[productsArray objectAtIndex:cellRow];
    productModel.cartItemQuantity=[NSString stringWithFormat:@"%d",valueofStepper];
    NSLog(@"stepper value %d from row %d",valueofStepper,cellRow);
}

Значение обновляется в модели продукта. Например Если я выберу Qty 8 в ячейке 1, Qty 5 в ячейке 2, Qty 7 в ячейке 3, если я увеличу значение в ячейке 4, оно сразу перейдет от 1 к некоторому случайному значению, например 10 или около того. РЕДАКТИРОВАТЬ: метод cellForRowAtIndexPath выглядит следующим образом

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *cartItemCellIdentifier =@"CartItemCell";
        CartItemCell *cartItemCell =[self.cartTableView dequeueReusableCellWithIdentifier:cartItemCellIdentifier];
        if(itemsArray)
        {
            ProductModel *productFromArray=[productsArray objectAtIndex:indexPath.row];
            cartItemCell.cartItemNameLabel.text=productFromArray.cartItemName;

            cartItemCell.cartItemQuantityLabel.text=productFromArray.cartItemQuantity;

            cartItemCell.cartItemCostLabel.text=productFromArray.cartItemCost;

            cartItemCell.cartItemImage.image=[UIImage imageNamed:productFromArray.cartItemImage];

            cartItemCell.cellRow=indexPath.row;




            cartItemCell.delegate=self;
        }
        return cartItemCell;

    }

Я установил Cellrow как indexpath.row в самом методе. Таким образом, я получаю, какой степпер был нажат. Но все же я получаю случайные значения.


person Haseeb Mohamed    schedule 30.08.2016    source источник
comment
Не передавайте cellRow в свой метод делегата, передайте ячейку (т.е. self), затем используйте indexPathForCell в своем методе делегата, чтобы определить, какая строка была затронута   -  person Paulw11    schedule 30.08.2016


Ответы (2)


Вы почти наверняка не полностью настраиваете свои ячейки в cellForRowAtIndexPath и выбираете устаревшие значения из переработанных ячеек. Вы во всех случаях устанавливаете значение шагового двигателя равным нулю?

Опубликуйте свой код для cellForRowAtIndexPath.

И, как указал Paulw11 в своем комментарии, переменная экземпляра cellRow не может иметь правильную строку ячейки независимо от того, какой степпер ячейки вы нажимаете. Вам нужно использовать источник степпера, чтобы выяснить, в какой ячейке он находится. (См. ответ Криса на этот вопрос для получения информации о выяснении indexPath ячейки для кнопки или другого элемента управления: Определение того, какая кнопка UIButton была нажата в UITableView)

person Duncan C    schedule 30.08.2016

table view или collection view deque ячейку и повторно использовать ячейку вместо создания новой для экономии памяти. Итак, вам нужно поиграть с методом cellForRowAtIndexpath для управления tableview источником данных. Из четвертой строки вы получаете случайные данные, это означает, что ваша четвертая ячейка отображается с использованием предыдущих ячеек.

Итак, в вашем случае вам нужно сохранить значение шагового двигателя в соответствии с indexPath or row и управлять им cellforrowatindexpath.

dequeueReusableCellWithIdentifier, обратитесь к документации Apple за более подробной информацией.

person Ketan Parmar    schedule 30.08.2016