ios Swift UITableView -如何将新条目放在列表的顶部而不是底部?

bzzcjhmw  于 2023-01-03  发布在  iOS
关注(0)|答案(5)|浏览(143)

我是Swift的新手。关于UITableView的示例代码显示新项目被放置在列表的底部。我们如何才能扭转这种情况呢?我搜索了互联网,但没有找到答案。
谢谢,葛文

js5cn81o

js5cn81o1#

UITableviews根据数组的顺序显示数据,如字符数组

var data = ["B","C","D","E"]

通常情况下,您可以使用append将数据添加到数组中,append会将数据添加到数组的末尾,因此它会将数据添加到列表的底部。

data.append("A")

如果希望表视图在列表顶部添加数据,则可以像这样在数组的开头添加数据。

data.insert("A", at: 0)

现在重新加载tableView,新数据将添加到列表顶部

yourTableViewName.reloadData()
yi0zb3m4

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()

重新加载整个表是一项代价高昂的任务,不建议使用。

r7s23pms

r7s23pms3#

将项添加到数组的最后一个索引中。然后重新加载tableView

k3bvogb1

k3bvogb14#

你真正需要做的是.在索引0插入你的对象而不是追加。在第一个索引0追加你的最新值确保你的最后一个数据显示在顶部。

你可以像往常一样继续使用tableview.reloaddata()。希望截图能有所帮助

uubf1zoe

uubf1zoe5#

在索引为0的数据数组中插入新项很容易,但是保持tableview的状态很困难,尤其是在处理标题时...
我用这个来附加旧消息时分页聊天...
你可以迭代数据和插入新的项目和标题与data.insert("new message", at: 0)但tableview自动去跳转零索引.保持该状态你应该需要一个唯一的id在每一个新的项目在我的情况下它是timemessageId
我正在保存最后一条消息的id,然后再添加新项...并使用该id计算前一条消息的索引路径,然后滚动到它,没有动画...

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附加新的新闻提要在上面。

相关问题