2017-03-24 2 views
0

Mon environnement de développement est swift3, xcode8. Je fais une application de liste comme l'application de messagerie d'Apple. Lorsque je sélectionne la liste dans la vue de tableau, je vais à la page de détail (à travers le seg) Et maintenant je veux implémenter plusieurs fonctions de suppression.swift - comment puis-je sélectionner plusieurs lignes dans tableview sans segue

Mais il y a un problème. Lorsque je modifie le mode, je peux voir la fenêtre de sélection. Mais si je sélectionne cette fenêtre de sélection, allez simplement à la page de détail.

Peut-être avant d'aller à la page de détail par Seg Je pense que je devrais en faire un choix multiple. Que dois-je faire?

Répondre

1

Assurez-vous de conformer quelque chose comme le code ci-dessous;

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 
} 
} 
+0

Merci pour votre réponse. Cependant, ce code n'a pas trouvé la source dont j'avais besoin. La sélection multiple fonctionne bien uniquement si le segue ne fonctionne pas. Existe-t-il un moyen de ne pas accéder à la sélection multiple en mode édition? –

+0

Pouvez-vous me montrer le code de la façon dont vous allez? –

+0

comment puis-je vous montrer mon code? Je ne sais pas bien parce que je suis un débutant .. Le segue a été créé en faisant glisser la cellule du storyboard avec le contrôle + le bouton gauche de la souris, en le faisant glisser vers la page de détail, puis en sélectionnant show. –

0

Ce code utilisé pour sélectionner la ligne multiple

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 
      } 
     } 
    } 
+0

Merci pour votre réponse. Mais mon problème est que si je vérifie en mode d'édition, Il n'est pas vérifié mais va à la page de détail par l'opération de segue de la cellule. Je voudrais vérifier dans l'état d'édition, pas d'opération de segue Si je compile sans segue La sélection multiple fonctionne bien. –