根据 Swift 中的 Int 刷新 UITableView 的某行
Refresh certain row of UITableView based on Int in Swift
我是 Swift 的初级开发人员,我正在创建一个包含 UITableView 的基本应用程序。我想刷新 table 的某一行,使用:
self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
并且我希望将要刷新的行来自名为 rowNumber
的 Int
问题是,我不知道该怎么做,我搜索的所有线程都是针对 Obj-C
有什么想法吗?
您可以使用行号和节号创建一个 NSIndexPath
,然后像这样重新加载它:
let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
在此示例中,我假设您的 table 只有一个部分(即 0),但您可以相应地更改该值。
Swift3.0 更新:
let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
怎么样:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
软冲击动画解决方案:
Swift 3:
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
这是防止应用程序崩溃的另一种方法:
Swift 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)
}
}
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
if visibleIndexPaths != NSNotFound {
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
在Swift3.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值设为0。
Swift 4
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
另外,如果你有 sections 用于 tableview,你不应该试图找到你想要刷新的每一行,你应该使用 reload sections。这是一个简单且更平衡的过程:
yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)
Swift 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)
我知道这个问题是针对 Swift 的,但如果有人感兴趣,这里是已接受答案的 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)
}
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()
我是 Swift 的初级开发人员,我正在创建一个包含 UITableView 的基本应用程序。我想刷新 table 的某一行,使用:
self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.none)
并且我希望将要刷新的行来自名为 rowNumber
的 Int问题是,我不知道该怎么做,我搜索的所有线程都是针对 Obj-C
有什么想法吗?
您可以使用行号和节号创建一个 NSIndexPath
,然后像这样重新加载它:
let indexPath = NSIndexPath(forRow: rowNumber, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top)
在此示例中,我假设您的 table 只有一个部分(即 0),但您可以相应地更改该值。
Swift3.0 更新:
let indexPath = IndexPath(item: rowNumber, section: 0)
tableView.reloadRows(at: [indexPath], with: .top)
怎么样:
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(rowNumber)], withRowAnimation: UITableViewRowAnimation.Top)
软冲击动画解决方案:
Swift 3:
let indexPath = IndexPath(item: row, section: 0)
tableView.reloadRows(at: [indexPath], with: .fade)
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
这是防止应用程序崩溃的另一种方法:
Swift 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)
}
}
Swift 2.x:
let indexPath = NSIndexPath(forRow: row, inSection: 0)
if let visibleIndexPaths = tableView.indexPathsForVisibleRows?.indexOf(indexPath) {
if visibleIndexPaths != NSNotFound {
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
在Swift3.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值设为0。
Swift 4
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
let indexPathRow:Int = 0
let indexPosition = IndexPath(row: indexPathRow, section: 0)
tableView.reloadRows(at: [indexPosition], with: .none)
另外,如果你有 sections 用于 tableview,你不应该试图找到你想要刷新的每一行,你应该使用 reload sections。这是一个简单且更平衡的过程:
yourTableView.reloadSections(IndexSet, with: UITableViewRowAnimation)
Swift 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)
我知道这个问题是针对 Swift 的,但如果有人感兴趣,这里是已接受答案的 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)
}
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()