如何解决在表格视图中通过滑动删除行无法正常工作
我使用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()
}
}
}
我现在的屏幕状态如何,我赞扬基本上所有功能都不要让您感到困惑,我所有的业务逻辑都在这里,这就是为什么什么都不显示,只是一些UI更改,视图模型不与控制器交互的原因(如您所见)在上面的代码中):
如果遇到此类错误,请帮助我。非常感谢。
解决方法
我会尝试使用: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 举报,一经查实,本站将立刻删除。