UIStepper 值递增随机数
UIStepper value increments random numbers
我在 Interface Builder 中设计了一个自定义单元格。
这是电子商务购物车的可重复使用的单元格 app.The 问题在于 UIStepper.I 可以根据用户添加到 [=27 的项目数量来拥有任意数量的单元格=] 问题是,如果我增加单元格 1,2 和 3 的步进值,单元格 4 的值将从某个随机数开始,而不是 one.Currently 我从 .plist 文件读取值并创建了一个产品模型并将它们保存到模型中并创建了一个产品模型 array.The 显示的数据来自 array.I 已经创建了一个委托,用于将值从自定义单元格获取到视图 Controller.The 步进器值更改函数是如下所示。
- (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);
}
产品模型中的值已更新。
对于前。如果我 select 单元格 1 中的数量 8,单元格 2 中的数量 5,单元格 3 中的数量 7,如果我增加单元格 4 中的值,它会直接从 1 跳到某个随机值,例如 10 左右。
EDIT:the 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 itself.So 我得到了哪个步进器 clicked.But 我仍然得到随机值。
table view
或 collection view
deque
单元格,并重用单元格而不是创建新单元格以提高内存效率。因此,您必须使用 cellForRowAtIndexpath
方法来管理 tableview
数据源。从第四行开始,您将获得随机数据,这意味着您的第四个单元格是使用之前的单元格显示的。
因此,在您的情况下,您必须按照 indexPath or row
存储步进器的值并且必须对其进行管理 cellforrowatindexpath
。
dequeueReusableCellWithIdentifier,请参阅 Apple 文档了解更多详情。
您几乎可以肯定没有在 cellForRowAtIndexPath
中完全配置您的单元格,而是从回收的单元格中获取陈旧的值。您是否在所有情况下都将步进器值设置为零?
Post 您的 cellForRowAtIndexPath
.
代码
而且,正如 Paulw11 在他的评论中指出的那样,无论您点击哪个单元格的步进器,实例变量 cellRow 都无法拥有正确的单元格行。您需要使用步进器的原点来确定它位于哪个单元格中。(请参阅 Chris 对此问题的回答,了解有关确定单元格的按钮或其他控件的 indexPath 的信息:Detecting which UIButton was pressed in a UITableView)
我在 Interface Builder 中设计了一个自定义单元格。
这是电子商务购物车的可重复使用的单元格 app.The 问题在于 UIStepper.I 可以根据用户添加到 [=27 的项目数量来拥有任意数量的单元格=] 问题是,如果我增加单元格 1,2 和 3 的步进值,单元格 4 的值将从某个随机数开始,而不是 one.Currently 我从 .plist 文件读取值并创建了一个产品模型并将它们保存到模型中并创建了一个产品模型 array.The 显示的数据来自 array.I 已经创建了一个委托,用于将值从自定义单元格获取到视图 Controller.The 步进器值更改函数是如下所示。
- (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);
}
产品模型中的值已更新。 对于前。如果我 select 单元格 1 中的数量 8,单元格 2 中的数量 5,单元格 3 中的数量 7,如果我增加单元格 4 中的值,它会直接从 1 跳到某个随机值,例如 10 左右。 EDIT:the 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 itself.So 我得到了哪个步进器 clicked.But 我仍然得到随机值。
table view
或 collection view
deque
单元格,并重用单元格而不是创建新单元格以提高内存效率。因此,您必须使用 cellForRowAtIndexpath
方法来管理 tableview
数据源。从第四行开始,您将获得随机数据,这意味着您的第四个单元格是使用之前的单元格显示的。
因此,在您的情况下,您必须按照 indexPath or row
存储步进器的值并且必须对其进行管理 cellforrowatindexpath
。
dequeueReusableCellWithIdentifier,请参阅 Apple 文档了解更多详情。
您几乎可以肯定没有在 cellForRowAtIndexPath
中完全配置您的单元格,而是从回收的单元格中获取陈旧的值。您是否在所有情况下都将步进器值设置为零?
Post 您的 cellForRowAtIndexPath
.
而且,正如 Paulw11 在他的评论中指出的那样,无论您点击哪个单元格的步进器,实例变量 cellRow 都无法拥有正确的单元格行。您需要使用步进器的原点来确定它位于哪个单元格中。(请参阅 Chris 对此问题的回答,了解有关确定单元格的按钮或其他控件的 indexPath 的信息:Detecting which UIButton was pressed in a UITableView)