Setzen Sie eine benutzerdefinierte Ansicht in einem UITableView
Ich habe einen regelmäßigen Stil UITableView—die eine, die hat einen weißen hintergrund und grauen horizontalen Linien zur Trennung der Zeilen.
Habe ich eine andere custom UIView ist, dass nur ein 100x100 Rechteck gefüllt mit redColor.
Wie kann ich letztere in erstere, wie es scheint über die horizontalen Linien, aber ist immer noch ein "Teil" der Tabelle anzeigen, in dem Sinne, dass ich beim scrollen der Tabelle um, die rote Ansicht scrollt mit ihm? In der Tat, ich sollte auch in der Lage sein, um meine finger auf den roten Bereich und scrollen Sie in der Tabelle anzeigen.
Wieder, wenn die roten anzeigen platziert, überlappen einige horizontale Linien, es erscheinen soll über die Linien. Leider, wenn ich einfach das rote Ansicht als unteransicht der Tabelle anzeigen, die horizontalen Linien gehen über den roten anzeigen; siehe dieser screenshot.
Wie kann dies erreicht werden?
- Wollen Sie, dass die rot-Ansicht ausblenden der Zeilen Inhalt ????
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN
Wenn Sie versuchen, um die anzeigen oberhalb der Linien (ausblenden der Zeilen) versuchen
– bringSubviewToFront:
es auf der Vorderseite der Tabelle anzeigen.SONST
Fügen Sie die Ansicht der
self.tableView.tableHeaderView
dieser wird oberhalb der Tabelle angezeigt und scrollt mit der Tabelle anzeigen.Glück
bringSubviewToFront:
war der trick, danke. Es gab für mich keine Notwendigkeit, nennen es mehrmals (in Orten wiescrollViewDidScroll:
oderlayoutSubviews
) wie einige andere hier vorgeschlagen. Ich habe gerade initialisiert meinen roten anzeigen imviewWillAppear:
(in derUITableViewController
Unterklasse) und rief dannbringSubviewToFront:
imviewDidAppear
(ich habe die rote-Ansicht in eine Instanz-variable). Dies funktionierte großartig für mich.Der richtige Ort, um behandeln Sie die Reihenfolge Ihrer roten Platz ist in der
layoutSubviews
Methode. Die Tabellenansicht sich selbst sendetlayoutSubviews
jeder Zeit Hinzugefügt oder entfernt Untersichten (und zu anderen Zeiten).Müssen Sie eine Unterklasse der
UITableView
hat eine Referenz auf das rote Quadrat:Können Sie initialisieren
redSquare
in welcher Weise auch immer Sie wollen. Ich steckte ihn in meine Feder zusammen mit der Tabelle ansehen, und zog es zu sich eine Untersicht des table view inawakeFromNib
:Sowieso, um tatsächlich machen Sie sicher, dass der rote Platz ist immer an der Spitze der Tabelle, Zellen und Rasterlinien, überschreiben
layoutSubviews
wie diese:UITableViewController
Unterklassen programmgesteuert, und alles was ich mache ist im code nur.[[UITableView alloc] init...]
. Sie brauchen, um es zu sagen[[MyTableView alloc] init...]
und seineredSquare
Eigenschaft.UITableViewController
's default table view, erstellen Sie Ihre eigene Instanz vonMyTableView
an und weisen Sie den controller derview
undtableView
Eigenschaften.UITableView
ist eine Unterklasse vonUIScrollView
können Sie in der Regel tun, was Sie müssen durch die UmsetzungUIScrollViewDelegate
Methoden wiescrollViewDidScroll:
in der table view delegate statt UnterklassenUITableView
. Aber manchmal ist es einfacher oder notwendig, UnterklasseUITableView
.Nur hinzufügen, dass diese Ansicht zu UITableView als Untersicht:
Sehen userInteractionEnabled - Eigenschaft, um die Interaktion und scrollen.
Machen Sie Ihrer Ansicht einen Untersicht jeder normale Untersicht
UITableView
: eine Kopfzeile, eine Fußzeile oder jedeUITableViewCell
.Ich denke, das was du beschrieben hast, kann am besten erreicht werden durch eine
UITableViewCell
oder sogar eine Untersicht der Kopfzeile. Eine Zelle hat die inhärente Fähigkeit zum scrollen der Tabelle und kann angepasst werden, jede so wie Sie es mögen. Es ist im wesentlichen eine Sicht.In Ihrer situation, zum Beispiel, möchten Sie vielleicht den roten Kasten erscheint standardmäßig am oberen Rand der Tabelle. Sie würde die erste Zelle, die einen 'red box' Zelle, wo Sie legen Sie Ihre red box in die Zelle den Inhalt anzuzeigen.
So, dein problem ist im Grunde, dass die UITableViewCells einer UITableView sind, Hinzugefügt, wie die Unteransichten dynamisch, und Sie können nicht kontrollieren, ob Sie vor oder hinter Ihrem Blick.
So halten Sie Ihre anzeigen an der front, die Sie brauchen, um es wieder es jedes mal, wenn Zellen Hinzugefügt werden kann, die Auftritt, wenn die UITableView Schriftrollen.
Ich würde vorschlagen, Sie versuchen Sie Ihre benutzerdefinierte Ansicht als unteransicht und dann überschreiben
-scrollViewDidScroll
etwa so:Bearbeiten Sie Ihre viewWillAppear Delegierter, mit diesen Zeilen