当它是一个单独的Swift文件时,从TableViewDataSource中删除或添加单元格

时间:2017-05-02 18:44:38

标签: ios swift uitableview

设定:

我有一个标准for作为tableview委托,还有一个名为TableViewController.swift单独的文件作为dataSource。

对于tableview的顶部,我在单元格内部有一系列按钮,它们具有关闭动作。此部分的目标是作为用户可以解雇的通知:enter image description here

每个按钮都有一个TableViewDataSource.swift标签。

问题

我的问题是这个。一旦用户点击“x”按钮,我想动画删除此单元格。它由此处理:

indexPath.row

但是,要正式删除一行,我需要调用

func tappedOnExit(_ sender: UIButton) { print ("tapped on \(sender.tag)") }

如上所述,由于按钮功能func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)位于我的tappedOnExit中,这是一个来自我的viewController的单独文件,我无法调用{{{ 1}}

非常感谢您的建议。谢谢!

4 个答案:

答案 0 :(得分:1)

听起来你正在抓住关闭按钮被击中错误位置的事实。您的数据源应该是进入表视图后面的模型的一个非常简单的接口。它不应该关注点击哪些细胞以及何时使用。

您的UIButtons可能应该将他们的点击,而不是数据源,而不是表格视图本身。然后,表视图可以确定哪一行已关闭并删除该行。

答案 1 :(得分:1)

您需要在viewcontroller文件中添加观察者(通知中心)。

点击" x"您可以从数据源文件中调用发布通知。

NSNotificationCenter.defaultCenter()。postNotificationName(deleteRow,object:indexPath.row)

答案 2 :(得分:1)

我认为你应该在这里使用委托或者找到一种不以这种方式限制你的替代方法。查看以下资源的授权:

https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

https://medium.com/ios-os-x-development/pass-data-with-delegation-in-swift-86f6bc5d0894

答案 3 :(得分:-1)

您不能自己致电commitEditingStyleTableView会发送该方法。您只需致电deleteRowAtIndexPathhttps://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html