将 UITableViewCell 内的 UITextField 保存到 NSMutableArray
Posted
技术标签:
【中文标题】将 UITableViewCell 内的 UITextField 保存到 NSMutableArray【英文标题】:Save UITextField inside of a UITableViewCell to NSMutableArray 【发布时间】:2012-03-22 02:34:43 【问题描述】:好的,我知道以前有人问过这个问题,但我的问题与其他问题不同。
我在自定义表格视图单元格中有一个文本字段,我需要在数字键盘被解除后将其保存到数组中。由于数字键盘没有完成按钮,我不得不实现一个触摸事件来关闭数字键盘。这意味着我的 -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
。
@ShivanRaptor 我只发布了与 UITableView 或 UITextField 相关的代码
【参考方案1】:
当您的触摸事件关闭键盘时,也调用 [self textFieldDidEndEditing:],或者如果您需要知道哪个文本字段最后获得了焦点,请通过定义一个 UITextField 对象来保持引用,该对象设置为当前具有textFieldDidBeginEditing 委托函数中的第一响应者。像这样:
//In .h
UITextField * txtReference;
//In .m
- (void)textFieldDidBeginEditing:(UITextField *)textField
txtReference = textField;
//In the function that dismisses the keyboard put:
[self textFieldDidEndEditing:txtReference];
【讨论】:
谢谢!这非常适合我的要求!不幸的是,我意识到我需要一种不同的方法,因为我在每个单元格中都有一个文本字段;) 如果您在每个单元格中都有 UITextfield,您是否考虑过制作自定义单元格(如果还没有)。以上是关于将 UITableViewCell 内的 UITextField 保存到 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章
将 UITableViewCell 内的 UITextField 保存到 NSMutableArray
如何将 UITableViewCell 内的 UICollectionViewCell 的选定索引路径保存到数组中?
Firestore - UITableViewCell 内的 UISlider
无法更改 UITableViewCell 内的 UIButton 图像