如何在Swift 2单元格中删除项目后重新加载tableview

我有一个TableView中的帐户列表。 按下button后,项目被删除。 到现在为止还挺好。

删除后如何刷新tableView? 请find下面的屏幕截图了解更多信息。

TableView是在另一个ViewController中,要删除的button是在一个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的viewDidLoad添加一个NSNotificationCenter

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadData:",name:"reloadData", object: nil) 

然后它的selector ,意味着function

 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) } } 

如果你的tableView使用bdAccount数组作为input数量的部分,行和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中消失。

您可以使用

 guard let index = bdAccount.indexOf(btnDeletar.titleLabel!.text) else { return } 

而是if (bdAccount.indexOf((btnDeletar.titleLabel?.text)!) != nil)

要删除一行,你需要存储单元格的索引path。 添加一个indexPath属性。

你的单元知道它是索引path和表视图后,你有所有的参数来调用tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)