ios - 当用户向 UITableView 添加行时,返回应用程序时新行不是 "stay"

标签 ios objective-c uitableview

我正在开发一款应用,用户可以在其中估算各种长度和宽度尺寸(面积),以便更好地确定所需数量。

我正在努力解决一些问题,但会一次解决一个...

我希望用户添加尽可能多的字段,以输入他们需要计算的所需区域...为此,我正在使用 UITableView 和可重复使用的单元格...我已经编码以允许用户添加一个新行(或他们喜欢的任意多行)。目前,该应用从 3 行开始,但如果他们想添加更多,他们可以。

这样“部分”就可以工作了……用户可以随意添加和删除行,但是,如果用户在应用程序中添加 3 或 4 行,然后关闭应用程序,返回时应用程序只会显示默认行数。

我的问题是......应用程序如何“记住”那些额外的行......所以下次用户进入应用程序时,新的行数总是显示而不是我的默认行数。我目前不是在询问如何保存行内的数据或信息,只是询问如何保存新的行数以供日后使用...

我有一些屏幕截图供引用...

您可以看到我从默认的 3 行开始,并允许用户添加更多...确实有效...但是,当我关闭应用程序时,默认的 3 行再次显示,忘记了添加的行用户...非常感谢任何帮助...

enter image description here

enter image description here

enter image description here

更新

所以现在我根据下面发布的建议有了以下附加代码...

在 Controller 中

- (UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

SodTableCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if(cell == nil){
    cell = [[SodTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
//if number of rows is greater than the total number of rows in the data set
//and this view is in editing mode.
//Initialize the cell for "Add Row"
//there will be an extra row once SetEditing: is called
if(indexPath.row >= tabledata.count && [self isEditing]){

    cell.areaNumber.text = @"";

    NSUserDefaults *area = [NSUserDefaults standardUserDefaults];
    [area setObject:self.area_Input forKey:@"sod_area_input_by_user"];
    [area synchronize];
    NSLog(@"%@",[area valueForKey:@"sod_area_input_by_user"]);

}else{ // this tableview is showing table (not in edit mode)

    /*cell.areaNumber.text = [tabledata objectAtIndex:indexPath.row];*/
    cell.areaNumber.text = tabledata[indexPath.row];

    // Configure the cell...
    UILabel*label = [[UILabel alloc] initWithFrame:CGRectMake(self.view.bounds.size.width/2.5, 0, self.view.bounds.size.width, 44)];

    NSString*text = [NSString stringWithFormat:@"Area %ld",(long)indexPath.row+1];
    [label setText:text];
    [label setTextColor: [UIColor colorWithRed:0.41 green:0.33 blue:0.25 alpha:1.0]];
    label.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:14.0f];
    [cell.contentView addSubview: label];
}

return cell;

其中 area_Input 是一个 NSString...

然后我尝试在 viewDidLoad 中显示结果

tabledata = [[NSMutableArray alloc] initWithObjects:self.area_Input, nil];

但是在查看 NSLog 时它显示为 nil...有什么想法吗?

最佳答案

您可以将这些单元格信息保存在 NSUserDefaults 中,然后在您的 viewWillAppear 中检索这些单元格并将它们保存到您用来加载单元格的数组中。

关于ios - 当用户向 UITableView 添加行时,返回应用程序时新行不是 "stay",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103185/

相关文章:

ios - 在不使用导航 Controller 的情况下将不同的 View 链接到 tableview/viewcontroller

iOS 参数标签 '(named:)' 不匹配任何可用的重载

ios - 如何在afnetworking中的AFHTTPRequestOperationManager请求中获得返回

ios - UILabel 以编程方式添加,在 iphone 6 上显示模糊文本

ios - 如何在声明函数之外访问单元格属性?

objective-c - UIImageView 中的纵横比

ios - 节点多于我应有的

objective-c - 从 iOS 中的 bundle 加载 Nib 文件的更快方法?

ios - tableView滚动然后progressView圆角半径自动改变

ios - 如何创建具有固定大小的 UIView 子类?