gpt4 book ai didi

ios - tableView.cellForRow(at : IndexPath(row:0, section:0)) 返回 nil 尽管滚动到 tableView 顶部

转载 作者:行者123 更新时间:2023-11-30 11:49:44 24 4
gpt4 key购买 nike

使用 Xcode 9.2 版、Swift 开发 iOS 应用程序。

当点击 RightNavigationButtonAdd 时,我想在 TableView 的开头插入一个 TableViewCell 并将焦点(成为FirstResponder)其中的 TextField 。

当插入的TableViewCell可见时,就可以正常工作了。但是,当插入的TableViewCell不可见时,会发生错误,因为cellForRow返回nil。

你能告诉我如何解决这个问题吗?

@objc func RightNavigationButtonAdd(_ sender: UIBarButtonItem) {
// array is ["aaa", "bbb", "ccc", "ddd", ...]
array.insert("", at: 0)
// ttableView is @IBOutlet var ttableView: UITableView!
ttableView.insertRows(at: [IndexPath(row:0, section:0)], with: .top)
// Scroll to top of tableView
UIView.animate(withDuration: 0.3, animations: {
self.ttableView.scrollToRow(at: IndexPath(row:0, section:0), at: .top, animated: true)
}, completion: { finished in
// when inserted cell is not visible, error occured:
// "Fatal error: Unexpectedly found nil while unwrapping an Optional value"
let cell = self.ttableView.cellForRow(at: IndexPath(row:0, section:0)) as! TableViewCell
cell.textField.becomeFirstResponder()
cell.textField.placeholder = "input anything ..."
})
}

更新

我不知道为什么,但是如果滚动动画:“false”,它就可以正常工作!

@objc func RightNavigationButtonAdd(_ sender: UIBarButtonItem) {
// array is ["aaa", "bbb", "ccc", "ddd", ...]
array.insert("", at: 0)
// ttableView is @IBOutlet var ttableView: UITableView!
ttableView.insertRows(at: [IndexPath(row:0, section:0)], with: .top)
// Scroll to top of tableView
UIView.animate(withDuration: 0.3, animations: {
self.ttableView.scrollToRow(at: IndexPath(row:0, section:0), at: .top, animated: false)
}, completion: { finished in
// when inserted cell is not visible, error occured:
// "Fatal error: Unexpectedly found nil while unwrapping an Optional value"
let cell = self.ttableView.cellForRow(at: IndexPath(row:0, section:0)) as! TableViewCell
cell.textField.becomeFirstResponder()
cell.textField.placeholder = "input anything ..."
})
}

最佳答案

如果你想获得一个可见的单元格,你应该这样做

let cell =  self.ttableView.visibleCells[0]

然后你可以检查单元格是否存在,或者检查 self.ttableView.visibleCells 的大小,你可以选择。

最后

@objc func RightNavigationButtonAdd(_ sender: UIBarButtonItem) {
// array is ["aaa", "bbb", "ccc", "ddd", ...]
array.insert("", at: 0)
// ttableView is @IBOutlet var ttableView: UITableView!
ttableView.insertRows(at: [IndexPath(row:0, section:0)], with: .top)
// Scroll to top of tableView
UIView.animate(withDuration: 0.3, animations: {
self.ttableView.scrollToRow(at: IndexPath(row:0, section:0), at: .top, animated: true)
}, completion: { finished in
if self.ttableView.visibleCells.count > 0 {
let cell = self.ttableView.visibleCells[0] as! TableViewCell
cell.textField.becomeFirstResponder()
cell.textField.placeholder = "input anything ..."
}
})

}

关于ios - tableView.cellForRow(at : IndexPath(row:0, section:0)) 返回 nil 尽管滚动到 tableView 顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48464519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com