2017-02-13 4 views
0

Ich verwende eine benutzerdefinierte UITableViewHeaderFooterView für mich TableView. Ich habe versucht, Zeilen in einem Abschnitt zu verstecken und anzuzeigen (was ich gerade arbeite). Ich habe beschlossen, einen Button (>) zum Abschnittskopf hinzuzufügen, damit ich ihn drehen kann, wenn der Abschnitt "expanded/collapsed" ist.Aktion, die auf Schaltflächen in allen TableView-Headern wirkt

Das Problem, das ich habe, erscheint, wenn ich auf die Schaltfläche klicke. Wenn die rotateCollapseButton()-Funktion aufgerufen wird, rotieren die (>) Schaltflächen in allen Abschnittsheadern, nicht nur die angeklickte. Manchmal schließt es sogar die Schaltfläche aus, auf die geklickt wurde, oder das Klicken auf eine Schaltfläche wirkt sich auf eine andere aus und nicht auf sie selbst. Wie kann ich es so machen, dass nur der richtige Knopf rotiert?

Dies ist der Code, den ich für den benutzerdefinierten Header habe, den ich erstellt habe.

var rotated:Bool = false 

var section:Int? 

weak var delegate:MessageGroupHeaderDelegate? 

@IBAction func expandCollapseButtonClicked(_ sender: Any) { 
    rotateCollapseButton(sender as! UIButton) 
    delegate?.didPressExpandCollapseButton(atSection : self.section!) 
} 

func rotateCollapseButton(_ button:UIButton) { 
    UIView.animate(withDuration: 0.5) {() -> Void in 
     var rotationAngle:CGFloat = CGFloat(M_PI_2) 

     if self.rotated { 
      rotationAngle = CGFloat(0) 
     } 

     button.transform = CGAffineTransform(rotationAngle : rotationAngle) 

     self.rotated = !self.rotated 
    } 
} 

EDIT: Code, wo der Header initialisiert ...

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    // Dequeue with the reuse identifier 
    let cell = self.massMessageGroupsTableView.dequeueReusableHeaderFooterView(withIdentifier: "MessageGroupTableViewHeader") 
    let header = cell as! MessageGroupTableViewHeader 
    header.groupNameLabel.text = messageGroupsMap[section]?.messageGroup.name 
    header.section = section 
    header.setComposeButtonImage() 
    header.delegate = self 

    return cell 
} 

Thank you!

+0

Können Sie auch den Code einfügen, wie Sie den Abschnittskopf verwenden? weil, wenn Sie das gleiche Objekt verwenden, es wahrscheinlich der Grund ist, dass alle sich drehen – unkgd

+0

Ich fügte eine Änderung oben hinzu. Hast du damit gemeint? –

+0

Ja, werden alle Abschnitte auf dem Bildschirm angezeigt? Oder sehen Sie, wie der Pfeil nach dem Scrollen gedreht wird? – unkgd

Antwort

0

In Ihrem Header Einstellung, tun versuchen Sie stattdessen:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    // Dequeue with the reuse identifier 
    let cell = self.massMessageGroupsTableView.dequeueReusableCell(withIdentifier: "MessageGroupTableViewHeader") 
    let header = cell as! MessageGroupTableViewHeader 
    header.groupNameLabel.text = messageGroupsMap[section]?.messageGroup.name 
    header.section = section 
    header.setComposeButtonImage() 
    header.delegate = self 

    let containingView : UIView = UIView() 
    containingView.addSubview(header) 

    return containingView 
} 
+0

Ich habe das versucht, aber ich kann keinen meiner Knöpfe sehen. Ich vermute es ist ein Problem mit der automatischen Ausgabe. Sobald ich das herausgefunden habe, melde ich mich zurück. Vielen Dank! –

+0

Nicht sicher, ob es wichtig ist oder nicht, aber 'MessageGroupTableViewHeader' Unterklassen 'UITableViewHeaderFooterView'. Ich habe eine separate .xib dafür. Aus diesem Grund habe ich 'self.massMessageGroupsTableView.dequeueReusableHeaderFooterView (withIdentifier:" MessageGroupTableViewHeader ")' –

+0

Versuchen und Unterklasse UITableViewCell anstelle von HeaderFooterView – unkgd

Verwandte Themen