将 TextField 内容保存在自定义动态 tableView 中
Posted
技术标签:
【中文标题】将 TextField 内容保存在自定义动态 tableView 中【英文标题】:save TextField content in an custom dynamic tableView 【发布时间】:2012-03-21 14:28:18 【问题描述】:我有一个带有动态 tableviewcontroller 的自定义 TableViewCell screenshot of my app
产品保存在 CoreData 中,我可以获取它们(名称、价格等),但我不知道如何实现产品的数量。它是一个文本字段,我想在单击购物篮按钮时保存文本字段。
这是我的 TableViewCell.h:
#import <UIKit/UIKit.h>
@interface ProduktTableViewCell : UITableViewCell <UITextFieldDelegate>
@property (nonatomic, weak) IBOutlet UILabel *produktnameLabel;
@property (nonatomic, weak) IBOutlet UILabel *preisLabel;
@property (nonatomic, weak) IBOutlet UILabel *vonDatumLabel;
@property (nonatomic, weak) IBOutlet UITextField *menge;
@property (nonatomic, weak) IBOutlet UILabel *bisDatumLabel;
@property (strong, nonatomic) IBOutlet UIButton *datumButton;
@property (strong, nonatomic) IBOutlet UIButton *warenkorbButton;
@end
TableViewCell.m:
#import "ProduktTableViewCell.h"
@implementation ProduktTableViewCell
@synthesize produktnameLabel;
@synthesize preisLabel;
@synthesize vonDatumLabel;
@synthesize bisDatumLabel;
@synthesize datumButton;
@synthesize menge;
@synthesize warenkorbButton;
@end
我的 ProductViewController.m:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
ProduktTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"produktCell"];
NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.produktnameLabel.text = [managedObject valueForKey:@"produktname"];
cell.vonDatumLabel.text = [managedObject valueForKey:@"vondatum"];
cell.bisDatumLabel.text = [managedObject valueForKey:@"bisdatum"];
cell.datumButton.tag = indexPath.row;
cell.warenkorbButton.tag = indexPath.row;
cell.menge.tag = indexPath.row;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSLocale *german = [[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];
[formatter setLocale:german];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMinimumFractionDigits:2];
[formatter setMaximumFractionDigits:2];
NSNumber *firstNumber = [managedObject valueForKey:@"preis"];
cell.preisLabel.text = [formatter stringFromNumber:firstNumber];
return cell;
我的购物篮按钮:
- (IBAction)warenkorbButton:(id)sender
NSManagedObjectContext *context = [app managedObjectContext];
UIButton *button = sender;
NSInteger rowInIndexPath =button.tag;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowInIndexPath inSection:0];
Warenkorb *warenkorb = [NSEntityDescription insertNewObjectForEntityForName:@"Warenkorb" inManagedObjectContext:context];
Produkt *produkt = [self.fetchedResultsController objectAtIndexPath:indexPath];
warenkorb.produktname =produkt.produktname ;
warenkorb.vondatum = produkt.vondatum;
warenkorb.bisdatum = produkt.bisdatum;
warenkorb.preis =produkt.preis;
NSError *error;
if (![context save:&error])
NSLog(@"Fehler beim hinzufügen : %@", [error localizedDescription]);
【问题讨论】:
【参考方案1】:这是我的理解。您想要获取在文本字段中输入的值。 (对吗?)在 ProduktTableViewCell.h 中,为 xib 文件中的 UITableView 元素创建一个出口——所以,类似于:
@property (retain, nonatomic) IBOutlet UITableView *myTableView;
请注意属性。上面的代码只是一个例子。然后,在 ProduktTableViewCell.m 上合成 myTableView
并声明一个全局变量:
static NSIndexPath *myIndexPath;
接下来,在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
上保存 indexPath:
myIndexPath = indexPath;
另外,为cell.menge.tag
分配一个唯一值:
cell.menge.tag = indexPath.row + 437812;
现在,在- (IBAction)warenkorbButton:(id)sender
中提取包含文本字段的单元格并最终获得文本字段:
UITableViewCell *cell = [myTableView cellForRowAtIndexPath:myIndexPath];
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:indexPath.row + 437812];
最后,文字在textField.text
。
希望这会有所帮助!
【讨论】:
是的,没错,但我无法访问 self.menge.text,因为它在 tableviewcell 中而不是在 tableviewcontroller 中。我不知道如何从 tableviewcontroller 访问文本字段 @ErayGeveci,我已经更新了我的答案。请通知我结果。 :) 顺便说一句,我假设 ProduktTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"produktCell"];不是零。 非常感谢。有用。 Xcode 在以下位置向我显示警告: static NSIndexPath *myIndexPath;这正常吗? 哪个是未使用的变量?无论如何,如果它这么说,我的意思是如果警告说未使用的变量,你可以删除它。以上是关于将 TextField 内容保存在自定义动态 tableView 中的主要内容,如果未能解决你的问题,请参考以下文章
当 React Material UI 中的 TextField 中存在值时自定义自动完成 CSS