3

我有一个UITableView被分解成用户定义数量的sections. 在这些sections中的每一个中总是有 2 rows。这两个中的每一个都rows包含一个UITextField用户可以编辑的内容。

我需要的是一种能够在UITextFields以后访问这些数据的方法。我希望这将是一个简单的问题,但它给我带来了很大的悲伤。

到目前为止,我尝试了两种方法:

尝试 1

我创建了两个NSMutableArrays,其中我将UITextField对象添加到索引 i (对应于section它来自)。然后我尝试通过遍历数组来访问这些值。这不起作用,因为UITextFields一直被擦干净。每次我向下滚动表格并且看不见UITextField时,当我回去时,它的内容已被擦干净。

尝试 2

我试图掌握其中的数量sectionsUITableView这很好)。然后我想遍历每个,记录每个中的section值。这就是我陷入困境的地方,因为我不确定如何做到这一点,或者是否可能。UITableViewrows

如果这是一个幼稚的问题,我深表歉意,但是我真的很挣扎,希望得到任何建议。

4

3 回答 3

4

请记住,文本字段会在您滚动时重复使用,因此您并不真的想存储对它们的引用。

相反,您所做的是在输入信息时捕获信息。textFieldDidEndEditing最简单的方法是在委托中实现协议方法。

棘手的部分是确定文本字段在哪一行。最好的方法是创建一个UITableViewCell具有NSIndexPath属性的子类。然后,您可以在使用 配置单元格时进行设置tableview:willDisplayCell:forRowAtIndexPath:

然后,在 textFieldDidEndEditing 中,通过其父视图访问 tableViewCell indexPath 属性。IE:

NSIndexPath indexPathOfParentCell = [(MyUITableViewCellSubclass *)self.superview indexPath]; 

这样做可以让您知道单元格的部分和行。

于 2012-05-30T16:58:16.587 回答
1

像这样在表格的 cellForRow 中创建您的 TextField 并给它一个标签

    UITextField * userField = [[[UITextField alloc] initWithFrame:CGRectMake(0, 12, self.view.frame.size.width -20, 20)] autorelease];
    userField.tag = 1001;
    userField.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14];
    userField.textAlignment = UITextAlignmentCenter;
    userField.delegate = self;
    userField.autocorrectionType = UITextAutocorrectionTypeNo;
    userField.autocapitalizationType = UITextAutocapitalizationTypeNone;
    userField.clearButtonMode = UITextFieldViewModeWhileEditing;

    if (indexPath.row == 0)
        [cell.contentView addSubview:userField];  

然后像这样访问 TextField:

    UITextField *userField = (UITextField *)[[(UITableViewCell *)[(UITableView *)tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] contentView] viewWithTag:1001];
于 2012-05-30T17:10:32.010 回答
0

如果您将文本字段的文本保留在数组中,而不是文本字段本身,您的“尝试 1”应该可以正常工作。(任何试图在数据对象中创建视图或控件的操作都很有可能出错。)

如果内容是单独存储的,那么无论作为表格视图的数据源的什么都应该能够根据部分和行重新填充滚动的单元格。

于 2012-05-30T17:00:39.917 回答