我是Swift的新手。关于UITableView的示例代码显示新项目被放置在列表的底部。我们如何才能扭转这种情况呢?我搜索了互联网,但没有找到答案。谢谢,葛文
js5cn81o1#
UITableviews根据数组的顺序显示数据,如字符数组
var data = ["B","C","D","E"]
通常情况下,您可以使用append将数据添加到数组中,append会将数据添加到数组的末尾,因此它会将数据添加到列表的底部。
data.append("A")
如果希望表视图在列表顶部添加数据,则可以像这样在数组的开头添加数据。
data.insert("A", at: 0)
现在重新加载tableView,新数据将添加到列表顶部
yourTableViewName.reloadData()
yi0zb3m42#
要将新项目放在顶部,请将其插入所需位置(索引0)并重新加载相应的indexPath(行:0,截面:0)。
let indexPathOfFirstRow = NSIndexPath.init(forRow: 0, inSection: 0) yourArray.insert("some element", atIndex: 0) tableView.beginUpdates() tableView.insertRowsAtIndexPaths([indexPathOfFirstRow], withRowAnimation: .Automatic) tableView.endUpdates()
重新加载整个表是一项代价高昂的任务,不建议使用。
r7s23pms3#
将项添加到数组的最后一个索引中。然后重新加载tableView
k3bvogb14#
你真正需要做的是.在索引0插入你的对象而不是追加。在第一个索引0追加你的最新值确保你的最后一个数据显示在顶部。你可以像往常一样继续使用tableview.reloaddata()。希望截图能有所帮助
uubf1zoe5#
在索引为0的数据数组中插入新项很容易,但是保持tableview的状态很困难,尤其是在处理标题时...我用这个来附加旧消息时分页聊天...你可以迭代数据和插入新的项目和标题与data.insert("new message", at: 0)但tableview自动去跳转零索引.保持该状态你应该需要一个唯一的id在每一个新的项目在我的情况下它是time和messageId我正在保存最后一条消息的id,然后再添加新项...并使用该id计算前一条消息的索引路径,然后滚动到它,没有动画...
data.insert("new message", at: 0)
time
messageId
func getIndexPath(WithMessageId id: Double) -> IndexPath? { for (section, sectionObjects) in messagesArray.enumerated() { if let index = sectionObjects.Messages?.firstIndex(where: { $0.MessageID == id }) { return IndexPath(row: index, section: section) } } return nil }
此方法返回索引路径使用,如下所示
self.tableView.reloadData() self.tableView.scrollToRow(at: getIndexPath(WithMessageId: lastMessageID) ?? IndexPath(row: 0, section: 0), at: .top, animated: false)
它会附加新的项目,甚至没有任何故障,如Twitter附加新的新闻提要在上面。
5条答案
按热度按时间js5cn81o1#
UITableviews根据数组的顺序显示数据,如字符数组
通常情况下,您可以使用append将数据添加到数组中,append会将数据添加到数组的末尾,因此它会将数据添加到列表的底部。
如果希望表视图在列表顶部添加数据,则可以像这样在数组的开头添加数据。
现在重新加载tableView,新数据将添加到列表顶部
yi0zb3m42#
要将新项目放在顶部,请将其插入所需位置(索引0)并重新加载相应的indexPath(行:0,截面:0)。
重新加载整个表是一项代价高昂的任务,不建议使用。
r7s23pms3#
将项添加到数组的最后一个索引中。然后重新加载tableView
k3bvogb14#
你真正需要做的是.在索引0插入你的对象而不是追加。在第一个索引0追加你的最新值确保你的最后一个数据显示在顶部。
你可以像往常一样继续使用tableview.reloaddata()。希望截图能有所帮助
uubf1zoe5#
在索引为0的数据数组中插入新项很容易,但是保持tableview的状态很困难,尤其是在处理标题时...
我用这个来附加旧消息时分页聊天...
你可以迭代数据和插入新的项目和标题与
data.insert("new message", at: 0)
但tableview自动去跳转零索引.保持该状态你应该需要一个唯一的id在每一个新的项目在我的情况下它是time
和messageId
我正在保存最后一条消息的id,然后再添加新项...并使用该id计算前一条消息的索引路径,然后滚动到它,没有动画...
此方法返回索引路径使用,如下所示
它会附加新的项目,甚至没有任何故障,如Twitter附加新的新闻提要在上面。