将 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

java定义一个学生类,其中包含姓名、年龄、成绩的属性,之后由键盘输入学生的内容,并将内容保存在文件

将表格保存在 PDF 的单页中

将 UITextView 内容保存在 NSString 中

如何将文本区域内容保存在本地存储中

强制OpenGL将内容保存在内存中?