Swift Delete不起作用/在表视图中显示



所以我正在使用表视图构建一个应用程序。问题是模拟器中没有显示要删除的滑动。当我试图向左滑动时,什么都不会弹出。这是主视图控制器的代码。任何帮助都将不胜感激!

  import UIKit
 class ViewController: UIViewController, UITableViewDataSource,  UITableViewDelegate {
var tableView : UITableView?
@IBOutlet weak var table: UITableView!
// Table View where the goals are displayed

override func viewDidLoad() {
    super.viewDidLoad()
navigationItem.title =  "Goal List"
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
override func viewWillAppear(animated: Bool) {
    table.reloadData()

}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return goalMgr.goals.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell : UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")
    //Assinging the contents of our goal array into rows
    cell.textLabel?.text = goalMgr.goals[indexPath.row].goal
    cell.detailTextLabel?.text = goalMgr.goals[indexPath.row].time
    return cell

}
func tableView(tableView: UITableView,
    didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var detail:SecondVC = self.storyboard?.instantiateViewControllerWithIdentifier("SecondVC") as SecondVC
    detail.cellGoal = goalMgr.goals[indexPath.row].goal
    detail.cellTime = goalMgr.goals[indexPath.row].time
    self.navigationController?.pushViewController(detail, animated: true)
}

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

func tableView(tableView:UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath:NSIndexPath!){
    if (editingStyle == UITableViewCellEditingStyle.Delete){
        goalMgr.removeGoal(indexPath.row)
        table.reloadData()
        }
  }
}

以下是创建removeGoal函数的文件

import UIKit
var goalMgr:GoalManager = GoalManager()
struct Goal{
var goal: String = "Goal"
var time: String = "Time"
 }
class GoalManager: NSObject {
var goals = [Goal]()
var persistentHelper: PersistentHelper = PersistentHelper()
override init(){
    var tempGoals:NSArray = persistentHelper.list("Goal")
    for res:AnyObject in tempGoals{
        goals.append(Goal(goal:res.valueForKey("goal")as String,time:res.valueForKey("time") as String))
    }
}
func addGoal(goal:String, time: String){
    var dicGoal: Dictionary<String, String> = Dictionary<String,String>()
    dicGoal["goal"] = goal
    dicGoal["time"] = time
    if(persistentHelper.save("Goal", parameters: dicGoal)){
        goals.append(Goal(goal: goal, time: time))
    }
}

func removeGoal(index:Int){
    var value:String = goals[index].goal
    if(persistentHelper.remove("Goal", key: "goal", value: value)){
        goals.removeAtIndex(index)
    }
}    
  }

您的tableView:commitEditingStyle:forRowAtIndexPath方法似乎已关闭。看起来您已将下面的方法粘贴到其中:

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool
{
    return true
}

您已经在tableView:commitEditingStyle:forRowAtIndexPath方法之上定义了tableView:canEditRowAtIndexPath方法。

更新

你说当你滑动时,删除按钮不会显示。但是,单元格的内容是否向左滑动?如果是的话,试试这个:

  1. 在模拟器中旋转设备(向左或向右)
  2. 确保可以看到行的两侧(分隔符应在视图中完全可见)
  3. 现在,滑动

代码中的一切似乎都很好,所以我猜删除按钮就在那里,但在纵向模式下它只是不可见。它应该在景观中可见,这就是为什么我建议采取上述步骤。

如果在横向模式下看到删除按钮,则需要调整UITableView与自动布局的对齐方式。

要使滑动工作,必须实现tableView:editingStyleForRowAtIndexPath:

在该函数中,您可以返回行支持的编辑样式。只有实现了这一点,才会滑动以删除工作。所以在这里返回UITableViewCellEditingStyle.Delete

如果您想更改滑动时显示的红色框中的文本标签,请执行tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:

tableView:canEditRowAtIndexPath:只是让您否决哪些行支持编辑。

另一件需要检查的事情是在属性检查器中为表视图单元格检查"启用用户交互"。默认情况下会选中它,但如果您在某个时候取消选中它,则滑动删除功能将不起作用。

相关内容

  • 没有找到相关文章

最新更新