Ios 基于Swift中的Int刷新UITableView的特定行

Ios 基于Swift中的Int刷新UITableView的特定行,ios,uitableview,swift,nsindexpath,Ios,Uitableview,Swift,Nsindexpath,我是Swift的初级开发人员,我正在创建一个包含UITableView的基本应用程序。我想使用以下命令刷新表中的某一行: self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none) 我希望刷新的行来自一个名为rowNumber的Int 问题是,我不知道怎么做,我搜索的所有线程都是为了Obj-C 有什么想法吗?您可以使用行和节号创建一个nsindepath,然后像这样重新

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

self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
我希望刷新的行来自一个名为rowNumber的Int

问题是,我不知道怎么做,我搜索的所有线程都是为了Obj-C


有什么想法吗?

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

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)
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
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)
    }
}
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}
那么:

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

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

Swift 3:

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
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)
    }
}
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}
Swift 2.x:

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
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)
    }
}
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}
这是防止应用程序崩溃的另一种方法:

Swift 3:

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
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)
    }
}
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}
Swift 2.x:

let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
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)
    }
}
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
   if visibleIndexPaths != NSNotFound {
      tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
   }
}

在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中只有一个节,则可以将节值设置为0。

Swift 4

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

此外,如果tableview中有,则不应尝试查找要刷新的每一行,应使用“重新加载节”。这是一个简单且更平衡的过程:

yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)

Swift 4.1

使用选定的行标记删除行时使用它

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)

我知道这个问题是针对斯威夫特的,但如果有人感兴趣,这里是公认答案的Xamarin等效代码

var indexPath = NSIndexPath.FromRowSection(rowIndex, 0);
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.Top);
SWIFT 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)
    }
func重新加载您的行(名称:){
让行=.index(共:)
让reloadPath=indepath(行:行!节:0)
tableView.reloadRows(位于:[reloadPath],带:.middle)
}

是否只有一个区段?如果特定区段的行数要更改,则@林赛Scott@Lyndsey:事实上,首先让我们假设我有2个单元格在我要重新加载的部分中,在重新加载之后,让我们假设我在该特定部分中有任意(x)个单元格,所以我的问题是,在indexpath计算中,我确定该部分,但我对行数感到困惑,因为它在更改行数var indepath=nsindepath(forRow:rowNumber,INSTITION:0)时崩溃@dip您需要查看您的tableView:numberOfRowsInSection:method算法以获取该信息。。。我建议你在论坛上发布你的问题,因为这听起来像是你的代码中的一个特定问题…在哪里调用这个方法?嗨,欢迎使用Stack Overflow,谢谢你的第一个答案。为了让答案对其他人更有用,最好的做法是用文本注释你的答案,解释它为什么能解决OP的原始问题。我发现自己处于一种特殊的情况。我的主要目标是当用户在一个单元格中时实现这一点。我做了一些修改。您可以只更新单元格,而不必加载整个表并混淆用户。因此,此函数利用tableView属性,添加一个自定义的重载数据单元。并添加tableview.ReloadDataSavingSelections()。在那里,你做一些动作。一旦我这么做了,我想和你们分享这个解决方案。请通过编辑它来为你们的答案添加所有澄清为什么你们复制粘贴我的答案?你们复制了我的答案,请检查日期