2016-08-30 75 views
0

我在Interface Builder中设计了一个自定义单元。 enter image description hereUIStepper值增加随机数

这是一个电子商务购物车应用程序的可重复使用的单元格。问题在于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]; 
} 

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

该值在产品型号中更新。 例如。如果我在单元格1中选择数量8,单元格2中选择数量5,单元格3中选择数量7,如果我在单元格4中增加一个值,它将从1直接跳到某个随机值,如10左右。 编辑:的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都不能拥有正确的单元行。您需要使用步进器的原点来确定它所在的单元。(请参阅Chris对此问题的回答以获取有关按钮或其他控件的单元格索引路径的信息:Detecting which UIButton was pressed in a UITableView

0

table viewcollection viewdequedeque该单元格,并重新使用单元格,而不是创建一个新的内存效率。所以,你必须用cellForRowAtIndexpath方法来管理tableview数据源。从第四行开始,您将得到随机数据,这意味着您的第四个单元格将使用先前的单元格显示。

因此,在您的情况下,您必须按照indexPath or row存储步进器的值,并且必须对其进行管理cellforrowatindexpath

dequeueReusableCellWithIdentifier,请参阅apple文档以获取更多详细信息。