【发布时间】:2022-01-04 06:50:29
【问题描述】:
我正在尝试插入一个新行,并立即使其成为第一响应者。
使用.insertRows() 似乎是异步执行的,即使使用.none。为动画。这意味着当我调用 cellForRow(at:) 时,它返回 nil。
在调用becomeFirstResponder之前等待插入完成的最佳方法是什么?
这不起作用:
self.tableView.insertRows(at: [newIndex], with: .none)
self.tableView.cellForRow(at: newIndex)?.becomeFirstResponder() //Returns nil
【问题讨论】:
-
我认为你可以使用
DispatchQueue.main.async。将这两行都放在主队列中。 -
这一切都发生在主线程上
-
然后为 cellForRow 行放一点延迟。
-
您可能还必须考虑,
self.tableView.cellForRow(at: newIndex)返回的单元格可能不可见,因此不能成为第一响应者。还要检查你是否在插入后调用reloadData()之类的东西,这可能会重置第一响应者。
标签: swift uitableview