自定义表格视图单元格中的可编辑文本字段
Posted
技术标签:
【中文标题】自定义表格视图单元格中的可编辑文本字段【英文标题】:Editable textfield in custom table view cell 【发布时间】:2015-07-25 07:10:26 【问题描述】:我有一个带有文本字段和两个标签的自定义表格视图单元格
TableViewCell:
@interface CartTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *proCost;
@property (weak, nonatomic) IBOutlet UITextField *txtQtyCount;
@property (weak, nonatomic) IBOutlet UILabel *lblTotalCost;
@end
ViewController.h
@interface CartViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate,UITabBarControllerDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tblView;
@end
ViewController.m
- (BOOL)textFieldShouldReturn:(UITextField *)textField
CGPoint origin = textField.frame.origin;
CGPoint point = [textField.superview convertPoint:origin toView:self.tblView];
NSIndexPath * indexPath = [self.tblView indexPathForRowAtPoint:point];
NSLog(@"%ld",(long)cartCell.txtQtyCount.tag);
[self.tblView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
qty = cartCell.txtQtyCount.text;
quanty = [qty doubleValue];
double qua = price * quanty;
qtotal =[[NSString alloc] initWithFormat:@"%.2f",qua];
[dictionary setObject:qtotal forKey:@"qtotal"];
[dictionary setObject:qty forKey:@"qty"];
[self.tblView beginUpdates];
NSArray *indexPaths = [[NSArray alloc] initWithObjects:indexPath, nil];
[self.tblView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
[self.tblView endUpdates];
[cartCell.txtQtyCount resignFirstResponder];
return YES;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
cartCell =[self.tblView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSDictionary *tmpDict = [myObject objectAtIndex:indexPath.row];
NSMutableString *name;
name = [NSMutableString stringWithFormat:@"%@ ",
[tmpDict objectForKey:@"name"]];
qty = [NSMutableString stringWithFormat:@"%@ ",
[tmpDict objectForKey:@"qty"]];
NSString *qtot = [NSString stringWithFormat:@"%@",[tmpDict objectForKey:@"qtotal"]];
NSMutableString *qcost;
qcost = [NSMutableString stringWithFormat:@"%@ ",
[tmpDict objectForKey:@"total"]];
cartCell.txtQtyCount.tag = indexPath.row;
cartCell.proCost.text = qcost;
cartCell.txtQtyCount.text = qty;
cartCell.lblTotalCost.text = qtot;
实际上,我有一个 proCost
和一个 double 值,txtQtyCount
可以在其中更新数量,因此我将价格乘以数量,并希望将相乘后的值保存在 lblTotalCost
中。我不清楚如何获取已编辑行的值(索引路径)。
【问题讨论】:
你能发布 cellForRowAtIndexPath: 方法吗? 你是不是在这个方法中返回了单元格,还是你删除了一部分? 是的,不幸的是我删除了该行,但我在编码中返回了单元格 你已经为 UITextField 设置了标签,还不够吗? 是的,但我不知道如何在 textfieldShouldReturn: 方法中获取已编辑文本的值和相应的价格 【参考方案1】:您可以通过查看更新的数据源数组(myObject)来检索您需要的任何值。
显然,您需要保持更新,因此当用户输入新数量时,请确保相应地在与文本字段标签相同的索引处更新“数量”tmpDict。
【讨论】:
[((NSMutableDictionary *)[myObject objectAtIndex:textfield.tag]) setObject:(用户在文本字段中输入的值) forKey:@"qty"];【参考方案2】:遇到过类似的问题。我想我真正需要的是正确单元格中该视图的indexPath
所以.. 我做了一个UITakeView
category
并有这样的方法:
-(NSIndexPath *)indexPathForCellContaininView:(UIView *)view
while (view != nil)
if ([view isKindOfClass:[UITableViewCell class]])
return [self indexPathForCell:(UITableViewCell *)view];
else
view = [view superview];
return nil;
然后您可以在对您的用例有意义的UITextFields
委托中使用它 - 启用:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSIndexPath *indexPath = [self.tableView indexPathForCellContaininView:textField];
/// do something with the index path - you have the exact cell / uitextfield being edited //
return YES;
【讨论】:
以上是关于自定义表格视图单元格中的可编辑文本字段的主要内容,如果未能解决你的问题,请参考以下文章