2016-04-01 6 views
4

Ich verwende derzeit einen UITableViewController (PFQueryTableViewController), ich möchte eine UIView über den Anfang der TableView anzeigen.Fügen Sie eine UIView über den oberen Rand von UITableViewController in Swift

Idealerweise würde ich das gerne im Storyboard machen, also kann ich einfach zusätzliche Labels/Buttons hinzufügen. Allerdings kann ich nicht herausfinden, wie oder ob Sie es im Storyboard machen können. Ist das richtig?

Ich habe es programmgesteuert versucht. Ich habe zuerst die Variable an der Spitze:

var filterLabelView:UIView = UIView()

Ich habe dann die folgenden in ViewDidLoad:

filterLabelView.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2, width: self.view.frame.width, height: 40) 
filterLabelView.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2) 
filterLabelView.backgroundColor = UIColor.redColor() 
self.view.addSubview(filterLabelView) // See below 

ich auch versucht:

self.view.insertSubview(filterLabelView, aboveSubview: tableView) 

Dies schafft die rote UIView, aber es scheint in die Tabellenansicht eingebettet zu sein, wenn ich nach oben und unten scrolle, bewegt sich die Ansicht damit.

Was will ich

Ideal schaffen, möchte ich die Ansicht am unteren Rand des Bildschirms sitzen, und nicht bewegen, wenn der Benutzer einen Bildlauf. Ein Beispiel-Screenshot, wie ich es sehen will, ist unten:

enter image description here

Ich habe gelesen, dass der beste Weg, um einen UIViewController mit einem UITableView im Innern, es zu benutzen ist, aber ich mag lieber nicht, dass Ansatz zu sehen, wie viel ist meine app schon aufgebaut.

Kann mir jemand helfen, dieses Aussehen zu erstellen? Vielen Dank im Voraus

Antwort

4

Sie müssen von UIViewController ableiten, um volle Layout-Kontrolle zu erhalten.

Dann einfach eine UITableView Instanz in Storyboard hinzufügen. Beschränken Sie es normalerweise, kantenbündig, oben bündig und haben Sie customView.top = tableView.bottom. Machen Sie eine normale Steckdose für Ihren Controller.

Sie müssen nur daran denken, Ihre Gewohnheit zu machen UIViewController die üblichen Datasource und delegieren Protokollen zu annehmen, sowie sich selbst als diese Rollen zu den Eigenschaften des UITableView bei der Initialisierung Zuweisung (in der Regel viewDidLoad()).

Es gibt eine weitere Finesse in Bezug auf die ausgewählte Zelle Clearing, wenn sie auf viewDidAppear(), aber es gibt nichts anderes Besondere an einem UITableViewController - es ist nur ein UIViewController mit einem eingebauten in tableView Eigenschaft und automatisch zugewiesen Delegierten und einem sehr unflexibel Layout.

ADDENDUM basierend auf Kommentar darüber, wie man das umgehen kann: Es ist eine Art zu fragen, ob es einen Weg gibt, einen Schraubenzieher einen Nagel in Holz zu treiben. Verwenden Sie einfach das richtige Werkzeug. Die oberste view Eigenschaft einer UITableViewController ist die UITableView selbst. Siehe unten, eine Aktie UITableViewController mit nichts anderem, Null-Code, im Layout-Debug-Modus.

Dies bedeutet, dass der gesamte Baum der Ansichten in eine gescrollte Entität eingebettet ist, so dass alle Subviews mit ihm scrollen.

Es sollte wirklich nicht so ein großes Problem sein, diese eine VC in Storyboard zu wiederholen. Immerhin ändert sich Ihr Rendering-Code in cellForRowAtIndexPath und Ihre dataSource und delegieren generell überhaupt nicht.

NACHTRAG 2:

Nicht innig Parse zu wissen, ist dies nicht möglich. (Danke, Parse.) Wenn Parse Sie nicht mit einem trennbaren PFQueryTableView versorgt, das Sie selbst einbetten können, ist möglicherweise die folgende Problemumgehung möglich, aber Sie müssen den Objective-C-Code verstehen:

https://www.parse.com/questions/pfquery-tableview-for-uiviewcontroller

enter image description here

+0

Vielen Dank für die Antwort. Das habe ich eigentlich gelesen. Ist das der einzige Weg dies zu erreichen? Meine App ist jetzt ziemlich stark aufgebaut und möchte versuchen, meinen Hauptbildschirm nicht erneut zu erstellen. Denkst du, dass es einen anderen Weg gibt? Vielen Dank im Voraus – Nick89

+0

@ Nick89 mit einem 'UIViewController' ist wahrscheinlich der beste Weg zu gehen, es sei denn, Ihre' tableview' hat nur einen Abschnitt, dann können Sie 'viewForHeaderInSection' setzen und es" sticky "machen. – kye

+0

@kye Hallo Kye, könntest du mir zeigen, wie ich das hinzufügen kann, ich habe noch keins hinzugefügt? – Nick89

Verwandte Themen