0

有什么方法可以告诉 UITableView 在单元格变得不可见时不要释放它们?

我问这个是因为我有这个问题:我有一个 UITableView 用作“插入视图”。在单元格内,我有许多 UITextView。当我推送 UITableView 时,我将“becomeFirstResponder”发送到第一个单元格,以在打开键盘的情况下启动视图。这可以正常工作。

但是,如果我向下滚动,当第一个单元格变得不可见时,键盘会自行关闭。注意:关联的 UITextView 是一个属性 retain 并且它正确地保持分配,只是单元格消失并且 UITextView 似乎辞职了第一响应者。

我知道我可以检查 UITextView 何时恢复可见并发送另一个 becomeFirstResponder,但我想知道我是否可以通过第一个请求达到我的目标:-)

谢谢问候法比奥

4

2 回答 2

0

这里我发现了一些新信息:

我看到键盘只是第一次关闭。示例:视图以 UITextView 作为 firstResponder 加载。滚动,键盘将关闭。但是,再次点击 UITextView 后,键盘会再次打开,然后永远不会关闭,即使再次滚动也是如此。

为了了解原因,我发现了这一点:

  • 在“viewDidLoad”中,我设置了第一响应者
  • 在 cellForRowAtIndexPath 我将 UITextView 添加为子视图
  • 在 ViewDidLoad 之后调用 cellForRowAtIndexPath

当 UITextView 退出第一响应者时,我看到它正在发生,因为 UITableView 正在搜索调用 CellForRowAtIndexPath 方法的特定单元格。但是,再次点击后,只为其他单元格调用 CellForRowAtIndexPath,而不是为选定的单元格调用。似乎,如果在 UITableView 设置后将 UITextView 设置为第一响应者,则即使不可见,也会保留该单元格。

然后,我尝试在“viewDidAppear”(在 uitableview 设置之后调用)中移动“becomefirstresponder”,然后,神奇地,问题解决了:-) 如果里面的 UITextView 是第一响应者,则不再释放单元格。

唯一剩下的问题是:在 viewDidApper 中调用“becomeFirstResponder”会导致键盘延迟显示在屏幕上。为了避免这种情况,我在 viewDidLoad 中调用了 becomeFirstResponder,然后在 viewDidAppear 中我辞职并再次调用了 becomeFirstResponder。

希望这可以帮助

于 2012-04-15T14:59:10.897 回答
0

在单元格中使用 tableview 通常它不会释放单元格。第一次它会分配一些可见的单元格,第一个时间表出现,之后它使用相同的单元格意味着在不同的 indexpath 的不同日期重用相同的单元格,你应该使用 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

于 2012-04-12T17:07:22.457 回答