这是我布局的丑陋表现。我在ViewController中有一个tableView,当选择单元格的侧面按钮时,灰色视图会显示单元格的名称和删除按钮。我在选择删除按钮时设置了算法,以删除字典的键(在本例中为'cell five')。但是,对于两个子视图都在运行的单独类,我在删除密钥后直接重新加载tableview时遇到问题。
我当前得到的最接近的是删除条目后的代码:
for(Map.Entry<String,String> entry : header.entrySet()) {
conn.setRequestProperty("\""+entry.getKey()+"\",\""+entry.getValue()+"\"");
}
这显然会在另一个类上运行viewDidLoad()函数,而不会导致任何致命错误,例如“在解包可选值时意外发现nil”(意味着无法识别tableView)。
为了进行额外的测试,我尝试在viewDidLoad中打印文本,除了cellForRowAt覆盖功能外,它还会打印每个条目,但不幸的是还包括我试图删除的条目!
我确信我的删除算法运行正常,因为我为viewWillAppear覆盖函数运行了一个IDENTICAL代码,该函数只返回我想要的内容。
关于我的代码的一个重要细节:
我更新此数据的方式是保存一个永久文件以记住每个条目和更改(所以当我运行viewDidLoad时,我基本上重新读取更改的文件)。
有人会对我的错误或解决问题的建议有什么建议吗?提前谢谢!
答案 0 :(得分:0)
为什么不应用协议来实现它? 类似的东西:
您的ViewController:
import UIKit
class HomeController: UIViewController,TableRowDeleteProtocol{
override func viewDidLoad() {
super.viewDidLoad()
deletePopUp.delegate = self // set this to get the reference of the HomeController in your custom view.
//Move whatever you code you have here to refresh your TableView away from here
refreshTable()
}
func refreshTable(){
//Fetch data and reload the TableView
}
func deleteTableViewRow() {
//delete the data from your saved file or make any change to the datasource
refreshTable()
}
}
protocol TableRowDeleteProtocol {
func deleteTableViewRow()
}
在您确认删除操作的自定义视图中,执行以下操作:
import UIKit
class DeletePopUpView: UIView{
var delegate: TableRowDeleteProtocol?
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBAction func confirmDelete(_ sender: Any) {
delegate?.deleteTableViewRow()
}
}