【问题标题】:Table Cell SubView Iteration Not Finding TextField表格单元格子视图迭代未找到文本字段
【发布时间】:2012-10-22 16:07:30
【问题描述】:

我创建了一个表格,其中每个单元格都包含一个文本标签和一个文本字段。我正在添加 [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....

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

【问题讨论】:

    标签: iphone objective-c uitableview subview


    【解决方案1】:

    您已将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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      为什么不将数据源映射到TableView,而只需检索/更新数据源中的值。然后,您可以调用 reloadRowsAtIndexPaths 来仅加载您刚刚更改的行。尝试遍历 TableView 而不仅仅是更新数据源似乎效率很低。

      【讨论】:

        【解决方案3】:

        您可以尝试将其查找为:而不是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 添加为子视图,并且仍然可以获取文本字段的引用,而无需跟踪其子视图索引。

        【讨论】:

          【解决方案4】:

          我想到了两件事:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-18
            相关资源
            最近更新 更多