swift - 如何在没有segue的情况下在tableview中选择多行

时间:2017-03-24 02:30:10

标签: ios swift xcode tableview editmode

我的开发环境是swift3,xcode8。 我正在制作像Apple的消息应用程序之类的列表应用程序。 当我在表格视图中选择列表时,我转到详细页面(通过seg) 现在我想实现多个删除功能。

但是存在问题。 当我编辑模式时,我可以看到选择窗口。 但是,如果我选择该选择窗口,只需转到详细信息页面。

也许在通过Seg进入详细页面之前 我想我应该把它做成多项选择。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

确保符合以下代码;

class TableviewController:UITableViewController{
override func viewDidLoad() {
    super.viewDidLoad()
    var isMultipleSelectionActive = false
    var selectedItems: [String: Bool] = [:]
    tableView.allowsMultipleSelectionDuringEditing = true
    tableView.setEditing(true, animated: false)
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
    cell.textLabel?.text = "\(indexPath.row)"
    return cell
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let selectedItem = items.objectAtIndex(indexPath.row)
    //add to selectedItems
    selectedItems[selectedItem] = true
}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    let selectedItem = items.objectAtIndex(indexPath.row)
    // remove from selectedItems
    selectedItems[selectedItem] = nil
}

func getStatusOfSelectedItems() {
    for item in selectedItems {
        println(item)
    }
}

//You should override shouldPerformSegueWithIdentifier and return false if isMultipleSelectionActive is true

override func shouldPerformSegue(withIdentifier identifier: String?, sender: Any?) -> Bool {
    if let identifierName = identifier {
        if identifierName == "NameOfYourSegueIdentifier" {
             if isMultipleSelectionActive {
                  return false
             }
        }
    }
    return true
}
}

答案 1 :(得分:0)

此代码用于选择多行

class TableViewController: UITableViewController
{
    var lastSelectedIndexPath = NSIndexPath(forRow: -1, inSection: 0)

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) 

        // Configure the cell...
        cell.textLabel!.text = "row: \(indexPath.row)"

        if cell.selected
        {
            cell.selected = false
            if cell.accessoryType == UITableViewCellAccessoryType.None
            {
                cell.accessoryType = UITableViewCellAccessoryType.Checkmark
            }
            else
            {
                cell.accessoryType = UITableViewCellAccessoryType.None
            }
        }

        return cell
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        let cell = tableView.cellForRowAtIndexPath(indexPath)

        if cell!.selected
        {
            cell!.selected = false
            if cell!.accessoryType == UITableViewCellAccessoryType.None
            {
                cell!.accessoryType = UITableViewCellAccessoryType.Checkmark
            }
            else
            {
                cell!.accessoryType = UITableViewCellAccessoryType.None
            }
        }
    }