2017-12-14 2 views
0

Ich versuche Aufklappen/Zuklappen Ansicht zu erstellen (Tableview verwenden) wie folgt aus:Aufklappen/Zuklappen arbeiten in Storyboard in Ordnung, aber nicht in xib

I

wo zunächst nur 3 Schlüssel, Wert-Paare werden angezeigt werden, und wenn der Benutzer auf die Schaltfläche klickt, wird sie (die Zelle für die Tabellenansicht) erweitert und beim erneuten Klicken wird sie ausgeblendet.

Was ich meine, ist zunächst sieht es wie folgt aus:

Simulator screenshot

Nach Klick auf den Button, es dehnt sich aus.

Ich gründe Delegaten in meiner tableViewCell Datei und einen Rückruf in dem Viewcontroller zu machen.

Im Storyboard, schaffte ich es aber funktioniert, wenn ich das gleiche mit xib versucht zu tun, gibt es ein Problem.

Ich weiß, dass es einige Randbedingungsproblem ist.

Dafür sind diese Einschränkungen, die die all-Taste (n) Label:

Key Constraints

Dies sind die Zwänge, dass Wert (e) Label hat:

Value Constraints

Die Verwendung dieser Einschränkungen im Storyboard funktioniert gut, aber nicht in xib.

Dies ist der Button-Aktion:

@IBAction func viewMoreButtonClicked(_ sender: UIButton) 
    { 
     print("Selected Button = \(sender.tag)") 

     if buttonDelegate != nil 
     { 
      if sender.isSelected 
      { 
       self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 212) 
      } 
      else 
      { 
       self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 400) 
      } 
//   self.view.frame = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 400) 
      buttonDelegate?.viewMoreButtonClickedDelegate(selectedButton: sender, currentCell: self) 
     } 
    } 

Dies ist der Delegierte Rückruf in der Viewcontroller:

func viewMoreButtonClickedDelegate(selectedButton : UIButton, currentCell : CardTableViewCell) 
    { 
     DispatchQueue.main.async { 
      self.selectedIndex = selectedButton.tag 
      self.cartTableView.beginUpdates() 
      self.cartTableView.endUpdates() 
     } 
    } 

Kann mir hier jemand helfen, wo bin ich mit diesem falsch gehen?

+0

Verwenden Sie die Tabellenansicht. –

+0

Ich benutze TABLEVIEW! Siehe meine Ansicht hiererachy. @ RahulDasgupta –

Antwort

2

UIStackView gibt Ihnen Erweiterungs- und Vertragsverhalten, wenn Sie Sichten ein-/ausblenden, die es enthält, und minimiert die Anzahl der Einschränkungen, die Sie benötigen. Verwenden Sie eines dieser Elemente in Ihrer Tabellenzelle, um die Vorteile des Expandierens und Kollabierens zu nutzen.

einen vertikalen Stapel Blick auf Ihre xib hinzufügen, die Ihren Schlüssel Wertpaar Ansichten enthalten sollte, von denen jedes Paar Sie in einem Container Ansicht setzen sollte.

Fügen Sie die Containeransichten, die Sie ausblenden möchten (d. H. Zeilen 4-10), in eine Outlet-Sammlung ein, die ich moreDetailViews genannt habe.

Wenn der Benutzer auf die Schaltfläche tippt, schalten Sie den versteckten Zustand für diesen Ansichten:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var moreDetailViews: [UIView]! 

    @IBAction func viewMoreButtonClicked(_ sender: UIButton) { 
     for detailView in moreDetailViews { 
      detailView.isHidden = !detailView.isHidden 
     } 
    } 
} 

Die Ansichten, die Sie auf die moreDetailViews Sammlung anschließen wird zwischen ein- und ausgeblendet wechseln, wenn die Taste abgegriffen wird. Richten Sie Ihre Stapelansicht mit einer vertikalen Achse, Ausrichtung als Füllung und Verteilung als gleichen Abstand ein, und die Stapelansicht wird verkleinert und erweitert, wenn Sie auf die Schaltfläche tippen.

Die Ansichten sollten eine eigene Höhe haben, während die Stapelansicht eine Position, aber keine Höhenbeschränkungen benötigt - ihre Höhe verringert sich und wächst, wenn die Ansichten hinzugefügt werden. Sie sollten in der Lage sein, die Zellenränder auf die Stapelansicht zu beschränken, sodass sie sich mit der Stapelansicht ausdehnt und zusammenzieht, was jedoch von Ihrer Implementierung der Tableview-Delegierten abhängen kann.

Stack view nib settings

+0

wenn ich diesen Code ausführen, stürzt es ab und dies ist das Crash-Protokoll: unerkannter Selektor an Instanz –

+0

gesendet Das ist kein voll genug Fehler für mich, Ihnen zu sagen, was das Problem ist (welche Selektor ?, welche Instanz?), Aber ich habe es einfach auf mein Handy geschrieben, es ist also nicht perfekt - ich hoffe, du warst in der Lage, dieses Problem in den letzten zwei Stunden selbst zu beheben, aber ich habe die Antwort für den Fall aktualisiert .. Es sieht so aus, als hätte ich '.hidden vergessen 'ist jetzt' .isHidden', so könnte es gewesen sein. Ich habe es auch geändert, um das 'isHidden' zu ändern, da' sender.isSelected' immer wahr ist, wenn Sie auf die Schaltfläche geklickt haben. Ich habe den 'buttonDelegate'-Aufruf ebenfalls entfernt, da dieser, soweit ich sehen kann, wirklich von Ihrer Frage getrennt ist. –

Verwandte Themen