2016-07-18 8 views
2

Ich habe eine Tabellenansicht in einem Viewcontroller. Ich habe eine kleine Funktion, um alle Zeilen in der Tabellenansicht auszuwählen. Wenn ich den Viewcontroller zum ersten Mal anzeige und die Schaltfläche Alle auswählen drücke, funktioniert die Funktion nicht. Wenn ich jedoch zuerst eine Zeile auswähle und dann die Alles auswählen-Schaltfläche drücke, funktioniert die Funktion wie gewünscht und alle Zeilen sind ausgewählt. Ich bin mir nicht sicher, warum das passiert. Der Delegat und die Datenquelle der Tabellenansicht wurden im Storyboard eingerichtet.Funktion funktioniert nicht korrekt, bis eine Zeile ausgewählt wurde

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell:myTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! myTableViewCell 

    cell.accessoryType = .None 

    if allJobsSelected { 

     let bgColorView = UIView() 
     bgColorView.backgroundColor = UIColor(red: 250/255, green: 182/255, blue: 17/255, alpha: 1) 
     cell.contentView.backgroundColor = UIColor(red: 250/255, green: 182/255, blue: 17/255, alpha: 1) 
     cell.selectedBackgroundView = bgColorView 
     cell.accessoryType = .Checkmark 
     cell.highlighted = false 

     cell.selected = true 
     // cell.accessoryType = .Checkmark 
     self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.None) 
     self.tableView(self.tableView, didSelectRowAtIndexPath: indexPath) 

    } 

    var job: Jobs! 

    job = jobs[UInt(indexPath.row)] as! Jobs 

    cell.reports2JobTitle.text = job.jobTitle 


    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.tableView.allowsMultipleSelection = true 

    if let cell:myTableViewCell = tableView.cellForRowAtIndexPath(indexPath) as? myTableViewCell { 

     let bgColorView = UIView() 
     bgColorView.backgroundColor = UIColor(red: 250/255, green: 182/255, blue: 17/255, alpha: 1) 
     cell.contentView.backgroundColor = UIColor(red: 250/255, green: 182/255, blue: 17/255, alpha: 1) 
     cell.selectedBackgroundView = bgColorView 
     cell.accessoryType = .Checkmark 
     cell.highlighted = false 
     self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.Bottom) 

    } 


} 

@IBAction func doSelectAll(sender: UIBarButtonItem) { 
    let totalRows = tableView.numberOfRowsInSection(0) 
    for row in 0..<totalRows { 
     tableView.selectRowAtIndexPath(NSIndexPath(forRow: row, inSection: 0), animated: false, scrollPosition: UITableViewScrollPosition.None) 
    } 
} 

Antwort

3

Es wäre wahrscheinlich eine gute Idee, diese Linie zu bewegen:

self.tableView.allowsMultipleSelection = true 

zu Ihrem viewDidLoad

Sie garantiert nicht, dass die didSelect sofort aufgerufen wird -, dass jeder sein könnte Select schaltet den vorherigen aus und dann wird ein einzelner didSelect in der letzten Zeile aufgerufen.