0

Ich bin nicht wirklich sicher, warum das langsam läuft. Manchmal kann ich auf die Reihe tippen und es öffnet sich sofort das Popup. Manchmal kann ich auf die Reihe tippen und es dauert 2-3 Sekunden, um zu laden. Es scheint fast so, als wäre der Code verwirrt, wenn man die Zelle bekommt.Swift Presenting Popover von UITableView läuft sehr langsam

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let selectedItem = self.filteredTransactions[indexPath.row] 
    if let cell = tableView.cellForRowAtIndexPath(indexPath) as? BudgetHomeCell { 
     if let addTXView = self.storyboard?.instantiateViewControllerWithIdentifier("BHAddTXVC") as? BHAddTXVC { 
      addTXView.modalPresentationStyle = .Popover 
      addTXView.preferredContentSize = CGSizeMake(200, 200) 
      let popover = addTXView.popoverPresentationController 
      popover?.permittedArrowDirections = .Any 
      popover?.delegate = self 
      popover?.sourceView = cell.valueLabel 
      popover?.sourceRect = cell.valueLabel.bounds 
      addTXView.selectedTX = selectedItem 
      self.presentViewController(addTXView, animated: true, completion: nil) 
     } 
    } 
} 

Alle Vorschläge für eine bessere Leistung bei der Präsentation der Popover von der Wertelabel in der Tabellenansicht Zelle? Während des Tippens habe ich den Debug-Navigator überprüft und es gibt keine CPU- oder Speicherspitzen. Dies geschieht sowohl für ein simuliertes iPad als auch für ein iPad Air 2. Ich habe eine Wischgeste ausgeführt, die es abwarf. Ich habe das entfernt und das Popup ist immer noch sehr langsam in einigen Fällen.

+1

Hier ist eine wilde und verrückte Vermutung: wickle das gesamte Innere deines 'didSelectRowAtIndexPath' in einen' delay' Block (für meine 'delay' Funktion, siehe http://Stackoverflow.com/a/24318861/341994). Es kann eine "Verzögerung" von "0" oder "0,1" sein. Sehen Sie, ob das einen Unterschied macht. Wenn es nicht hilft, okay, wir haben versagt, nimm es wieder raus. – matt

+0

wie @matt vorgeschlagen, können Sie versuchen, den Code explizit auf dem Hauptthread auszuführen. –

+0

Sollte das erkannt haben, denke ich, ich habe mich wirklich gefragt, ob es etwas mit dem Code gab, der es langsam verarbeiten ließ, dass ich es falsch machte. Die Verwendung von Matts Vorschlag funktioniert. – matthew

Antwort

2

Jemand antwortete das in einem anderen Beitrag. Überprüfen Sie es hier: https://stackoverflow.com/a/27227446/4740794

Der Trick besteht darin, die Zeile manuell zu deaktivieren, nachdem es ausgewählt ist. Es hat super für mich funktioniert. Stellen Sie sicher, dass Sie die ausgewählte Zeile bei Bedarf verwenden oder speichern, bevor Sie sie abwählen.