微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在表格视图中通过滑动删除行无法正常工作

如何解决在表格视图中通过滑动删除行无法正常工作

我使用mvvm架构构建了一个应用程序。不知道为什么
func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath) 它在我的视图控制器上没有被调用(基本上不起作用,它可以像1/20一样工作)。如果我将tableview(基本视图)及其方法构建到另一个视图控制器,则效果很好。我尝试从头开始构建视图控制器,但又不影响结果,因此问题肯定出在控制器的功能上。

我的代码在滑动处效果很好(我这样做只是为了检查它是否在我的应用程序中有效:)

class tbViewController: UIViewController {
    @IBOutlet weak var tableview: UITableView!
    private var data = ["1","2","3","4"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableview.delegate = self
        tableview.dataSource = self
    }
}
extension tbViewController: UITableViewDataSource{
    
    func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        return self.data.count
    }
    
    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath)
        cell.textLabel?.text = self.data[indexPath.row]
        return cell
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView,canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    
    func tableView(_ tableView: UITableView,editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
        return .delete
    }
    func tableView(_ tableView: UITableView,forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            tableView.beginUpdates()
            self.data.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath],with: .fade)
            tableView.endUpdates()
        }
    }
}

我的原始视图控制器在滑动不起作用的地方,我还与上面的那个交换了原始的tableview,只是为了验证问题是否出在tableview上……我无法得到它:C。 (请检查第一个tableview方法):

class ExpensesViewController: UIViewController,ChartViewDelegate {
    
    @IBOutlet private weak var thisWeek: UIButton!
    @IBOutlet private weak var thisMonth: UIButton!
    @IBOutlet private weak var thisYear: UIButton!
    @IBOutlet private weak var totalExpensedamount: UILabel!
    @IBOutlet private weak var pieChart: PieChartView!
    @IBOutlet private weak var tableView: UITableView!
    
    private var menu: SideMenuNavigationController?
    private var tableViewActions = [Action]()
    private var expensesviewmodel = Expensesviewmodel()
    private var data = ["1","4"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        initSideBar()
        customizeButtons()
        customizePieChart()
        self.tableView.delegate = self
        self.tableView.dataSource = self
    }
    
    @IBAction func didTapMenu(){
        present(self.menu!,animated: true)
    }
    
    @IBAction func onClickThisWeek(_ sender: UIButton) {
        setGrayBackgroundAndBlackTitleColor(for: self.thisMonth,and: self.thisYear)
        sender.backgroundColor = #colorLiteral(red: 0.05509413034,green: 0.7074701786,blue: 0.4755263329,alpha: 1)
        sender.setTitleColor(#colorLiteral(red: 1,green: 1,blue: 1,alpha: 1),for: UIControl.State.normal)
    }
    
    @IBAction func onClickThisMonth(_ sender: UIButton) {
        setGrayBackgroundAndBlackTitleColor(for: self.thisWeek,for: UIControl.State.normal)
    }
    
    @IBAction func onClickThisYear(_ sender: UIButton) {
        setGrayBackgroundAndBlackTitleColor(for: self.thisWeek,and: self.thisMonth)
        sender.backgroundColor = #colorLiteral(red: 0.05509413034,for: UIControl.State.normal)
    }
    
    private func setGrayBackgroundAndBlackTitleColor(for button1: UIButton,and button2: UIButton){
        button1.backgroundColor = #colorLiteral(red: 0.921431005,green: 0.9214526415,blue: 0.9214410186,alpha: 1)
        button2.backgroundColor = #colorLiteral(red: 0.921431005,alpha: 1)
        button1.setTitleColor(#colorLiteral(red: 0,green: 0,blue: 0,for: UIControl.State.normal)
        button2.setTitleColor(#colorLiteral(red: 0,for: UIControl.State.normal)
    }
    
    
    private func initSideBar(){
        self.menu = SideMenuNavigationController(rootViewController: MenuListController())
        self.menu?.leftSide = true
        self.menu?.setNavigationBarHidden(true,animated: false)
        SideMenuManager.default.leftMenuNavigationController = self.menu
        SideMenuManager.default.addPanGesturetoPresent(toView: self.view)
    }
    
    private func customizeButtons(){
        self.thisWeek.setTitleColor(#colorLiteral(red: 1,for: UIControl.State.normal)
        self.thisWeek.backgroundColor = #colorLiteral(red: 0.05509413034,alpha: 1)
        self.thisWeek.layer.borderColor = #colorLiteral(red: 0.05509413034,alpha: 1)
        self.thisMonth.layer.borderColor = #colorLiteral(red: 0.05509413034,alpha: 1)
        self.thisYear.layer.borderColor = #colorLiteral(red: 0.05509413034,alpha: 1)
    }
    
    private func customizePieChart(){
        self.pieChart.delegate = self
        self.pieChart.noDataText = "You don't have any income,to display quarters income."
        self.pieChart.legend.enabled = false
        let pieChartAttribute = [ NSAttributedString.Key.font: UIFont(name: "Arial",size: 16.0)!,NSAttributedString.Key.foregroundColor: UIColor.init(displayP3Red: 0.462,green: 0.838,blue: 1.000,alpha: 1) ]
        let pieChartAttrString = NSAttributedString(string: "Quarterly Revenue",attributes: pieChartAttribute)
        self.pieChart.centerattributedText = pieChartAttrString
    }
}


extension ExpensesViewController: UITableViewDataSource{
    func tableView(_ tableView: UITableView,with: .fade)
            tableView.endUpdates()
        }
    }
}

原始屏幕应如何:

enter image description here

我现在的屏幕状态如何,我赞扬基本上所有功能都不要让您感到困惑,我所有的业务逻辑都在这里,这就是为什么什么都不显示,只是一些UI更改,视图模型不与控制器交互的原因(如您所见)在上面的代码中):

enter image description here

如果遇到此类错误,请帮助我。非常感谢。

解决方法

我会尝试使用:https://developer.apple.com/documentation/uikit/uitableviewdelegate/2902367-tableview

对于前导滑动也有类似的功能。

,

“我不知道为什么 func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath)在我的视图控制器上没有被调用。”

之所以未调用该方法,是因为您忘记在视图控制器的声明中添加它应该为UITableViewDelegate

注意:使用beginUpdates方法删除/删除单行是没有意义的。顺便说一句,当执行多个插入/删除操作时,最好使用performBatchUpdastes。最后但并非最不重要的一点是,Swift命名约定是用大写字母开头的类命名您的类。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。