Хорошо, я знаю, что этот вопрос задан раньше, но у меня другая проблема, чем у других.Сохраните UITextField внутри UITableViewCell до NSMutableArray
У меня есть текстовое поле внутри пользовательской ячейки таблицы, которую мне нужно сохранить в массиве после отклонения номерной подушки. Поскольку на цифровой клавиатуре нет кнопки, мне пришлось реализовать сенсорное событие, чтобы отклонить цифровую панель. Это означает, что мой -textFieldDidEndEditing не срабатывает. Вот соответствующий код:
в моей viewController.h
itemData *tempItem; //A custom object
UITableView *itemsListTable;
NSMutableArray *listData;
в моей viewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [itemsListTable
dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:SimpleTableIdentifier];
NSInteger row = indexPath.row;
tempItem = [listData objectAtIndex:row];
cell.textLabel.text = [tempItem getItemName];
UITextField *quantityTextField = [[UITextField alloc] initWithFrame:CGRectMake(275, 8, 35, 27)];
quantityTextField.keyboardType = UIKeyboardTypeNumberPad;
quantityTextField.borderStyle = UITextBorderStyleRoundedRect;
quantityTextField.returnKeyType = UIReturnKeyDone;
quantityTextField.text = [NSString stringWithFormat:@"%d", tempItem.getItemQuantity];
quantityTextField.textAlignment = UITextAlignmentCenter;
[cell addSubview:quantityTextField];
}
return cell;
}
-(void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event {
[[self itemsListTable] endEditing:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
UITableViewCell *cell = (UITableViewCell*)textField.superview;
NSIndexPath *indexPath = [self.itemsListTable indexPathForCell:cell];
tempItem = [listData objectAtIndex:indexPath.row];
NSLog(@"Did End Editing");
[tempItem setItemQuantity:[textField.text intValue]]; //save textfield to object as intValue
[listData replaceObjectAtIndex:indexPath.row withObject:tempItem]; //save object to array
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[listData removeObjectAtIndex:indexPath.row];
[itemsListTable reloadData];
}
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
numberOfItems.text = [NSString stringWithFormat:@"%d",listData.count];
return [self.listData count];
}
В дополнение, для хорошего соглашения об именах, все имена классов должны начинаться с заглавной буквы, например. 'ItemData' вместо' itemData'. – Raptor
@ShivanRaptor Я только написал код, относящийся к UITableView или UITextField – Boos1993