tableView不应该刷新后应该刷新(由单独的类调用) - swift

时间:2018-03-10 11:24:46

标签: swift database uitableview class persistent

enter image description here

这是我布局的丑陋表现。我在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时,我基本上重新读取更改的文件)。

有人会对我的错误或解决问题的建议有什么建议吗?提前谢谢!

1 个答案:

答案 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() 
}
}