UIStepper值增加随机数

时间:2016-08-30 09:56:18

标签: ios objective-c iphone uitableview uistepper

我在Interface Builder中设计了一个自定义单元格。enter image description here

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

该值在产品型号中更新。 对于前者如果我在单元格1中选择数量8,单元格2中的数量5,单元格3中的数量7,如果我在单元格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。所以我得到了哪个步进器被点击了。但我仍然得到随机值。

2 个答案:

答案 0 :(得分:0)

table viewcollection view deque单元格,并重复使用单元格而不是为内存效率创建新单元格。因此,您必须使用cellForRowAtIndexpath方法来管理tableview数据源。从第四行开始,您将获得随机数据,这意味着您可以使用之前的单元格显示第四个单元格。

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

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

答案 1 :(得分:0)

您几乎肯定没有在cellForRowAtIndexPath中完全配置您的单元格,并且正在从回收的单元格中获取过时的值。在所有情况下,您是否将步进器值设置为零?

发布cellForRowAtIndexPath的代码。

正如Paulw11在他的评论中指出的那样,无论您使用哪个单元格的步进器,实例变量cellRow都不能拥有正确的单元格行。您需要使用步进器的原点来确定它所在的单元格。(请参阅Chris对此问题的回答,以获取有关按钮或其他控件的单元格索引路径的信息:Detecting which UIButton was pressed in a UITableView