У меня есть представление таблицы с несколькими разделами и пользовательскими ячейками представления таблицы. Я пытаюсь поместить степпер в свои ячейки и метку, указывающую значение степпера. Я добавил IBAction для UIStepper внутри ячейки в моем контроллере представления (я решил, что контроллер представления должен обрабатывать это событие вместо ячейки):
- (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 (который предоставляет данные для ячеек представления таблицы) и модифицировал метод foodAmountStepperChanged::
- (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: table view:
cell.mealAmountStepper.value = currentMeal.amount;
Он устанавливает значение шагового двигателя в свойство суммы объекта Meal, чтобы оно изменялось правильно.
[[sender superview] superview]
? Или просто[sender superview]
? - person nhgrif   schedule 17.11.2013[[sender superview] superview]
, и он отлично работает, возвращает правильную ячейку. - person József Vesza   schedule 17.11.2013