ChatGPT解决这个技术问题 Extra ChatGPT

在 Swift 中基于 Int 刷新 UITableView 的某一行

我是 Swift 的初级开发人员,我正在创建一个包含 UITableView 的基本应用程序。我想使用以下方法刷新表格的某一行:

self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)

我希望将被刷新的行来自一个名为 rowNumber 的 Int

问题是,我不知道该怎么做,而且我搜索的所有线程都是针对 Obj-C

有任何想法吗?

只有一节吗?

C
Carmen

您可以使用行号和节号创建一个 NSIndexPath,然后像这样重新加载它:

let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)

在本例中,我假设您的表只有一个部分(即 0),但您可以相应地更改该值。

Swift 3.0 更新:

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)

如果要更改特定部分的行数,那么? @林赛斯科特
@Lyndsey:实际上,首先可以说我要重新加载的那个部分中有2个单元格,重新加载后可以说我将在该特定部分中有任何(x)个单元格,所以我的问题是indexpath 计算,我确定该部分,但我对行数感到困惑,因为它在更改行数时崩溃 var indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
@dip,您需要查看您的 tableView:numberOfRowsInSection: 方法算法以获取该信息...我建议您在论坛上发布您的问题,因为这听起来像是您的代码遇到的特定问题...
在哪里调用这个方法?
K
Khuong

对于软影响动画解决方案:

斯威夫特 3:

let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)

斯威夫特 2.x:

let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

这是保护应用程序免于崩溃的另一种方法:

斯威夫特 3:

let indexPath = IndexPath(item: row, section: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.index(of: indexPath as IndexPath) {
    if visibleIndexPaths != NSNotFound {
        tableView.reloadRows(at: [indexPath], with: .fade)
    }
}

斯威夫特 2.x:

let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}

N
Neha

斯威夫特 4

let indexPathRow:Int = 0    
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)

为什么你复制粘贴我的答案?
你复制了我的答案,检查日期
L
Legend_ 33

斯威夫特 4.2

    func reloadYourRows(name: <anyname>) {
    let row = <your array name>.index(of: <name passing in>)
    let reloadPath = IndexPath(row: row!, section: 0)
    tableView.reloadRows(at: [reloadPath], with: .middle)
    }

j
jaiswal Rajan

在 Swift 3.0 中

let rowNumber: Int = 2
let sectionNumber: Int = 0

let indexPath = IndexPath(item: rowNumber, section: sectionNumber)

self.tableView.reloadRows(at: [indexPath], with: .automatic)

默认情况下,如果 TableView 中只有一个 section,则可以将 section value 设置为 0。


H
Hardik Thakkar
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)

您好,欢迎来到 Stack Overflow,感谢您的第一个回答。为了使答案对其他人更有用,最佳做法是用文本注释您的答案,解释为什么它解决了 OP 的原始问题。
B
Burcu Kutluay

此外,如果你有 tableview 的部分,你不应该尝试找到你想要刷新的每一行,你应该使用重新加载部分。这是一个简单且更平衡的过程:

yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)

w
wildbagel

我意识到这个问题是针对 Swift 的,但如果有人感兴趣,这里是已接受答案的 Xamarin 等效代码。

var indexPath = NSIndexPath.FromRowSection(rowIndex, 0);
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);

s
skyline75489

怎么样:

self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)

R
Rana Ali Waseem

斯威夫特 4.1

当您使用行的 selectedTag 删除行时使用它。

self.tableView.beginUpdates()

        self.yourArray.remove(at:  self.selectedTag)
        print(self.allGroups)

        let indexPath = NSIndexPath.init(row:  self.selectedTag, section: 0)

        self.tableView.deleteRows(at: [indexPath as IndexPath], with: .automatic)

        self.tableView.endUpdates()

        self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .automatic)

i
irwin B
    extension UITableView {
        /// Reloads a table view without losing track of what was selected.
        func reloadDataSavingSelections() {
            let selectedRows = indexPathsForSelectedRows

            reloadData()

            if let selectedRow = selectedRows {
                for indexPath in selectedRow {
                    selectRow(at: indexPath, animated: false, scrollPosition: .none)
                }
            }
        }
    }

tableView.reloadDataSavingSelections()

我发现自己处于一种特殊的境地。我的主要目标是当用户在单元格中时实现这一点。我做了一些修改。您可以只更新它所在的单元格,而不会加载整个表格并使用户感到困惑。出于这个原因,这个函数利用了 tableView 的属性,添加了一个自定义的 ReloadDataCell。并添加tableview.reloadDataSavingSelections()。在哪里,你做一些动作。一旦我这样做了,我想与你分享这个解决方案。
请通过编辑为您的答案添加所有说明