gpt4 book ai didi

ios - 使用 UIStepper 更新 UITableViewCell 内容

转载 作者:行者123 更新时间:2023-12-01 16:45:47 25 4
gpt4 key购买 nike

我有一个包含多个部分的表格 View 和自定义表格 View 单元格。我试图在我的单元格中放置一个步进器,以及一个指示步进器值的标签。我在 View Controller 的单元格中为 UIStepper 添加了一个 IBAction(我认为 View Controller 应该处理此事件而不是单元格):

- (IBAction)mealAmountStepperChanged:(id)sender
{
// Get the cell in which the button was pressed
SOMealTableViewCell *cell = (SOMealTableViewCell *)[[sender superview] superview];
// Get the value of the stepper (it has an outlet in my custom cell
int value = cell.mealAmountStepper.value;
// Update the text field of the cell with the new value (also has an outlet in the custom cell)
cell.mealAmountField.text = [NSString stringWithFormat:@"%d",value];
}

问题是这种方法会更新所有部分中的相应字段,而不仅仅是我想要的那个。如何仅更改一个单元格中的文本?

更新:

我在 Meal 类中添加了一个“数量”属性(它为表格 View 单元格提供数据)并修改了 mealAmountStepperChanged: 方法:
- (IBAction)mealAmountStepperChanged:(id)sender
{
// Get the cell in which the button was pressed
SOMealTableViewCell *cell = (SOMealTableViewCell *)[[sender superview] superview];
// Get the value of the stepper (it has an outlet in my custom cell
int value = cell.mealAmountStepper.value;
// Get the indexpath of the cell in which the stepper was pressed
NSIndexPath *indexPath = [self.menuTableView indexPathForCell:cell];

SOMealManager *manager = [SOMealManager sharedMealManager];
SOMeal *currentMeal;
switch (indexPath.section)
{
case 0:
currentMeal = manager.startersArray[indexPath.row];
break;
case 1:
currentMeal = manager.soupsArray[indexPath.row];
break;
case 2:
currentMeal = manager.mainDishesArray[indexPath.row];
break;
case 3:
currentMeal = manager.dessertsArray[indexPath.row];
break;
case 4:
currentMeal = manager.drinksArray[indexPath.row];
break;
case 5:
currentMeal = manager.alcoholicDrinksArray[indexPath.row];
break;
default:
break;
}

currentMeal.amount = value;
dispatch_async(dispatch_get_main_queue(), ^
{
[self.menuTableView reloadData];
});

}

现在该操作一次只更新一行,但似乎所有部分的步进器值都保持不变(所以当我更新另一个部分中的单元格时,它不会从 0 开始,而是在值更改为在前面的其他部分)。

最终更新

如果我添加 cellForRowAtIndexPath: TableView 数据源方法可以解决前面的问题:
cell.mealAmountStepper.value = currentMeal.amount;

它将步进器的值设置为 Meal 对象的 amount 属性,以便正确更改。

最佳答案

它在所有部分都发生了变化,因为所有单元格都有一个 mealAmountField,并且您告诉他们将其文本设置为您的步进器的值。要解决此问题,您需要在数据源中使用“字段”来跟踪标签中的值。根据您的单元格数据源现在的样子,此“字段”可能是字典中的键值对,而您的数据源是字典数组。在步进器的操作方法中,您将获取步进器所在单元格的 indexPath,并使用该值更新字典数组中的正确条目。这是表格 View 始终工作的方式——它们用于显示值,而不是用于存储它们。

关于ios - 使用 UIStepper 更新 UITableViewCell 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com