2016-08-30 2 views
0

Я разработал пользовательскую ячейку в Interface Builder. enter image description hereЗначение UIStepper увеличивает случайные числа

Это многоразовая ячейка приложения для электронной коммерции. Проблема заключается в UIStepper.I может иметь любое количество этих ячеек на основе количества элементов, добавленных пользователем в корзину. Так что проблема в том, что если я увеличиваю значения шагового элемента ячейки 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]; 
} 

Реализация функции в контроллере просмотра приведена ниже.

-(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); 
} 

Значение обновляется в Product Model. Для примера. Если я выберу Qty 8 в ячейке 1, Qty 5 в ячейке 2, Qty 7 в ячейке 3, если я увеличиваю значение в ячейке 4, он скачет прямо от 1 до некоторого случайного значения, такого как 10 или около того. EDIT: метод cellForRowAtIndexPath выглядит следующим образом

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

static NSString *cartItemCellIdentifier [email protected]"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 в методе itself.So я получаю, который был шагового clicked.But до сих пор я получаю случайные значения.

+0

Не пропускайте ' cellRow' в ваш метод делегата, передайте ячейку (то есть 'self'), затем используйте' indexPathForCell' в вашем методе делегата, чтобы определить, какая строка была затронута – Paulw11

ответ

0

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

Оставьте свой код для cellForRowAtIndexPath.

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

0

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

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

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

Смежные вопросы