gpt4 book ai didi

ios - 将单元格中的 UITextField 文本保存到 NSUserDefaults 中?

转载 作者:行者123 更新时间:2023-11-28 22:33:56 25 4
gpt4 key购买 nike

我已经看过所有接近这个问题的帖子,但仍然没有找到有用的东西。我在每个单元格中都有 textFields,用作用户填写的表单。单元格的所有内容都可以正常工作,除了滚动时,文本字段中的输入会在单元格滚动出屏幕时消失。我知道这是因为出队。但是应该有一种方法来保存输入的数据,以便在滚动或退出应用程序时它不会消失。我还希望能够获取此信息并将其作为 PDF 或文档通过电子邮件发送。实现这一目标的最佳方法是什么?下面的代码是我如何生成单元格等的示例。

.h文件

@interface MasterViewController : UITableViewController <UITextFieldDelegate, UITextFieldDelegate, UITableViewDataSource, UINavigationBarDelegate>{

NSString* name_;
UITextField* nameFieldTextField;

}

// Creates a textfield with the specified text and placeholder text
-(UITextField*) makeTextField: (NSString*)text
placeholder: (NSString*)placeholder;

// Handles UIControlEventEditingDidEndOnExit
- (IBAction)textFieldFinished:(id)sender;

@property (nonatomic,copy) NSString* name;

.m文件

@synthesize name = name_;

- (void)viewDidLoad{

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];

self.name = @"";
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

// Make cell unselectable and set font.
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.font = [UIFont fontWithName:@"ArialMT" size:13];

if (indexPath.section == 0) {

UITextField* tf = nil;
switch ( indexPath.row ) {
case 0: {
cell.textLabel.text = @"Name" ;
tf = nameFieldTextField = [self makeTextField:self.name placeholder:@"John Appleseed"];
nameFieldTextField.tag = 1;
[cell addSubview:nameFieldTextField];
break ;
}
// Textfield dimensions
tf.frame = CGRectMake(120, 12, 170, 30);

// Workaround to dismiss keyboard when Done/Return is tapped
[tf addTarget:self action:@selector(textFieldFinished:) forControlEvents:UIControlEventEditingDidEndOnExit];
}
return cell;
}


// Textfield value changed, store the new value.
- (void)textFieldDidEndEditing:(UITextField *)textField {

//Section 1.
if ( textField == nameFieldTextField ) {
self.name = textField.text ;
}
}

- (void)viewWillAppear:(BOOL)animated{

NSString *nameCellString = [[NSUserDefaults standardUserDefaults] stringForKey:@"nameCellString"];
nameFieldTextField.text = nameCellString;

}

- (void)viewWillDisappear:(BOOL)animated{

NSString *nameCellString = self.name;

[[NSUserDefaults standardUserDefaults] setObject:nameCellString forKey:@"nameCellString"];

}

最佳答案

这里实际上有两个问题,它们都在您的 cellForRowAtIndexPath: 实现中。

  • 您正在将文本字段放入单元格中,即使此单元格被重复使用并且已经有一个文本字段。因此,您实际上是在文本字段上叠加文本字段,覆盖了之前存在的文本字段。

  • 如果该行(索引路径)的文本字段中已有文本,则您不会将文本放回文本字段中。

换句话说,细胞(正如您所说的那样)被重复使用,因此您需要考虑这一事实。您必须查看传入单元的状态,并相应地重新配置单元。

关于ios - 将单元格中的 UITextField 文本保存到 NSUserDefaults 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com