如何在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)
。