【问题标题】:iPhone - textField in a tableViewCell - Scrolling off screen clears the valueiPhone - uitableViewCell 中的文本字段 - 滚动屏幕清除值
【发布时间】:2011-01-19 20:17:26
【问题描述】:

我在 tableViewCell 中有一个 textField。我最近注意到,如果我在 textBox 中输入一个值,然后将单元格滚动到屏幕外,那么 textbox 中的值就会消失。

我有一个防范措施。如果不存在 UIKeyboard,则 tableView 无法滚动到足以重绘单元格的程度。但是,有些用户不使用键盘上的完成键使键盘消失,而是向上滚动表格,从而破坏程序。

有没有办法立即将 textField 字符串存储到变量中,或者让 tableView 不滚动,或者如果用户尝试滚动 tableView,让键盘消失?

我没有此视图的 NIB 文件,它是一个可编程的 tableViewController,因此我无法在 Interface Builder 中使用不可见的自定义按钮执行任何操作,正如 StackOverflow 上的其他问题中所建议的那样。

【问题讨论】:

    标签: iphone uitableview uitextfield


    【解决方案1】:

    您应该将您创建的NSTextField 的委托设置为控制器,然后在您的控制器中实现textField:shouldChangeCharactersInRange:replacementString:,以便在文本字段中的文本更改时随时通知您。

    当文本更改时,将更改的文本存储在控制器的属性中。

    当您在cellForRowAtIndexPath 中创建NSTextField 时,设置该属性的值。

    请记住,使用 Cocoa,您需要将模型数据与视图分开。

    【讨论】:

    • 但是当 textField 向上滚动并且值被删除时会发生什么。实例变量是否也失去了它的价值?
    • 不,当委托调用 textField:shouldChangeCharactersInRange:replacementString 时,您应该将文本字段中的字符串复制到实例属性中,以便在删除 UITableViewCell 后它仍然有效。
    【解决方案2】:

    这个问题的答案是实现ScrollView委托方法willBeginDragging。 UITableView 继承自 UIScrollView。

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
           [textField resignFirstResponder];
    }
    

    当 tableView 开始滚动时,这会关闭键盘

    通过这种继承,也可以防止tableView滚动,期间。将 scrollEnabled 属性设置为 NO,一拉

    self.tableView.scrollEnabled = NO;
    

    【讨论】:

      【解决方案3】:

      您是否在 cellForRowAtIndexPath:: 方法中实例化文本字段?如果是这样,它可能会在每次单元格滚动到视图中时重新实例化。

      您应该保存对控制器上文本字段的引用并在您的 cellForRowAtIndexPath:: 中重复使用它:

      【讨论】:

      • 我使用 case 语句块将 textField 添加到第 0 节第 2 行。 textField 在标题中声明为指针,因此我可以使用 myTextField.text 访问属性。这有帮助吗?
      • 我不太关注。你是说在你的 cellForRowAtIndexPath 方法中你有一个 case 语句来确定你是否在第 0 行第 2 行,如果是,它会添加文本字段?如果是这样,你在哪里调用 [[UITextField alloc] init]?如果它也在 cellForRowAtIndexPath 方法中,那么您可能会在每次行滚动到视图中时重新初始化文本字段(并调用 cellForRowAtIndexPath)。尝试在 loadView 或控制器的主 init 方法中初始化文本字段。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多