ホーム>source

現在、このコードを使用してユーザーのオンラインステータスを更新しています。オンラインステータスが変わるたびに、TableView全体がリロードされます。

<前>ウィズウィズ

私はエキスパートではありませんが、影響を受ける行のみをリロードする必要があると感じています。

特定のIndexPathを取得するにはどうすればよいですか

self.users.first(ここで:{$0.uid == onlineStatus.keys.first})

、それで私は行をリロードできますか?

// Get and update the actual online stats for the users UserApi.shared.getUserOnlineStatus { (onlineStatus) in if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) { let values = onlineStatus.values.first as? Array<Any> let onlineStatus = values?[0] user.onlineStatus = onlineStatus as? Bool } self.tableViewUsers.reloadData() } }
あなたの答え
  • 解決した方法 # 1

    試して、

    <前>ウィズウィズ

    最初に、ユーザーリストで変更されたユーザーのインデックスを取得し、UITableView関数 UserApi.shared.getUserOnlineStatus { (onlineStatus) in if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) { let values = onlineStatus.values.first as? Array<Any> let onlineStatus = values?[0] user.onlineStatus = onlineStatus as? Bool if let index = self.users.firstIndex(of: user) { self.tableViewUsers.reloadRows(at: [IndexPath(row: index, section: 0)], with: .automatic) } } } を使用して、そのインデックスで行を再読み込みする必要があります。

    [reloadRows(at:with:)]

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ c++ - あいまいな関数呼び出し:テンプレートパラメータを多くのオーバーライド関数の1つに渡す