0

我创建了一个表格,其中每个单元格都包含一个文本标签和一个文本字段。我正在添加文本字段[cell addSubview:passwordField];,从视觉角度来看,它们出现并且是可编辑的,等等......

当我尝试从文本字段中检索输入的值时,就会出现问题。我遍历单元格并尝试获取子视图(即文本字段),但是,我的迭代只发现了文本标签。

这是我用来搜索的代码:

for(NSInteger i =0; i < [tableView numberOfRowsInSection:0]; i++){
   NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
   UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
   UIView* subView = [[cell.contentView subviews]lastObject]; // I've also tried object at index here

// Anything beyond this is just matching....

我采用的另一种方法是递归搜索子视图,但同样没有产生任何结果。

4

4 回答 4

6

您已经添加了您textField的单元格子视图。

[cell addSubview:passwordField];

当您尝试在cell.contentView.
将您添加textField为的子视图cell.Contentview

[cell.contentView addSubview:passwordField];

并以这种方式找到它 -

for(UIView *view in [cell.contentView subviews])
{
    if([view isKindOfClass:[UITextfield class]])
    {
       UITextField *textField = (UITextField *)view;
       NSLog(@"%@",textField.text);
    }
}
于 2012-10-22T16:10:55.637 回答
2

为什么不将数据源映射到TableView并仅检索/更新数据源中的值。然后,您可以调用reloadRowsAtIndexPaths以仅加载您刚刚更改的行。尝试迭代TableView而不是仅仅更新数据源似乎非常低效。

于 2012-10-22T16:12:29.727 回答
2

UIView* subView = [[cell.contentView subviews]lastObject];可以尝试将其查找为:

for(UIView *view in [cell subviews])
{
  if([view isKindOfClass:[UITextfield class]]){
    // view is the reference to your textfield
  }
}

这样,您可以将其他UIViews 添加为子视图,并且仍然可以获取文本字段的引用,而无需跟踪其子视图索引。

于 2012-10-22T16:14:08.460 回答
0

我想到了两件事:

  1. 从长远来看,创建一个UITableViewCell包含UITextField可作为属性访问的 a 会更容易。您可以使用 nib 来布局单元格,也可以在单元格 init 方法中以编程方式进行。这种方法将使您的代码更易于管理。

  2. 您需要考虑单元重用。如果您正在重用单元格(应该如此),那么您需要在重用之前存储从文本字段中获取的值。

于 2012-10-22T17:17:04.287 回答