如何在单元格 Swift 2 中删除项目后重新加载表格视图
Posted
技术标签:
【中文标题】如何在单元格 Swift 2 中删除项目后重新加载表格视图【英文标题】:How to reload tableview after delete item in cell Swift 2 【发布时间】:2016-03-29 09:07:30 【问题描述】:我在TableView
中有一个帐户列表。在我按下一个按钮后,一个项目被删除。到现在为止还挺好。
tableView 删除后如何刷新?请查看以下屏幕截图以获取更多信息。
TableView在另一个ViewController,要删除的按钮在一个ViewControllerCell
class cellAccount: UITableViewCell
@IBOutlet weak var imgAccount: UIImageView!
@IBOutlet weak var lblNomeAccout: UILabel!
@IBOutlet weak var btnDeletar: UIButton!
@IBAction func btnDeletar(sender: AnyObject)
print(btnDeletar.titleLabel?.text)
if (bdAccount.indexOf((btnDeletar.titleLabel?.text)!) != nil)
print(bdAccount.indexOf((btnDeletar.titleLabel?.text)!))
bdAccount.removeAtIndex(bdAccount.indexOf((btnDeletar.titleLabel?.text)!)!)
bdAccount.sortInPlace()
self.tableView.reloadData() // How to Reload???
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
override func setSelected(selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
【问题讨论】:
在你的 ViewController 中重新加载.. 不在 tableviewcell 中 我认为正确的做法是创建委托或块,然后在 ViewController 中处理按钮触摸事件,而不是在 TableViewCell 中 【参考方案1】:你可以试试这个方法,在你的ViewController中添加一个NSNotificationCenter
viewDidLoad
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadData:",name:"reloadData", object: nil)
然后是它的selector
,表示函数
func reloadData(notification:NSNotification)
// reload function here, so when called it will reload the tableView
self.TableView.reloadData()
在您的 viewController 中添加了以上两项后,现在您需要调用/触发此通知以重新加载您的 TableView。所以在你的btnDelete
里面点击了,
@IBAction func btnDeletar(sender: AnyObject)
print(btnDeletar.titleLabel?.text)
if (bdAccount.indexOf((btnDeletar.titleLabel?.text)!) != nil)
print(bdAccount.indexOf((btnDeletar.titleLabel?.text)!))
bdAccount.removeAtIndex(bdAccount.indexOf((btnDeletar.titleLabel?.text)!)!)
bdAccount.sortInPlace()
// This will fire the Notification in your view controller and do the reload.
NSNotificationCenter.defaultCenter().postNotificationName("reloadData",object: self)
【讨论】:
Thaks 工作正常 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewControllerAccout.reloaddData(_:)), name: "reloaddData", object: nil)【参考方案2】:如果您的 tableView 使用 bdAccount 数组作为节数、行数和 cellForRowAtIndexPath 数据的输入,则仅此而已。
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return bdAccount.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
// Configure the cell...
cell.textlabel?.text = bdAccount.labelText // or something like that
return cell
如果您现在调用 tableView.reloadData() 方法,它将重新加载整个 tableView,并且由于它基于您刚刚删除一个实体的数组,因此该实体也将从 tableView 中消失。
【讨论】:
感谢您的反馈,但我的 TableView 在另一个 ViewController 中。要删除的按钮位于 ViewControllerCell 中 不如看看:***.com/questions/20655060/…【参考方案3】:你可以使用
guard let index = bdAccount.indexOf(btnDeletar.titleLabel!.text) else
return
改为if (bdAccount.indexOf((btnDeletar.titleLabel?.text)!) != nil)
要删除一行,您需要存储单元格的索引路径。添加indexPath
属性。
在你的单元格知道它的索引路径和表格视图之后,你就有了调用tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
的所有参数。
【讨论】:
以上是关于如何在单元格 Swift 2 中删除项目后重新加载表格视图的主要内容,如果未能解决你的问题,请参考以下文章
如何重新加载 UIPageViewController 以在 Swift 中重新加载其视图
如何重新加载UIPageViewController以在Swift中重新加载其视图
在 UITableView (swift2) 中选择单元格时更新/重新加载 ViewController
如何在编辑表格视图单元格中的文本字段时重新加载所有表格视图单元格 - iOS Swift
如何在要删除的单元格上使用 longtapGesture 从集合视图中删除 uicollectionviewcell?迅速