Ich habe eine UITableViewController
mit einer Liste von benutzerdefinierten UITableViewCells
. Die Zelle hat Text, der manchmal lang ist. Ich schneide das bei 2 Zeilen in der Tabelle ab.Benutzerdefinierte UITableViewCell in eine andere benutzerdefinierte UIView einbetten?
Wenn ein Benutzer die Zelle berührt, mag ich mit den exakt gleichen Informationen wie die UITableViewCell
, mit dem Zusatz eines Header über den UITableViewCell
Inhalt ein UIView
als Popup erstellen. Also, im Wesentlichen, möchte ich etwas wie folgt aus:
ich VersePopupView
gerade gebaut haben, wie im Bild angezeigt, in dem der Text „Benutzerdefinierte Kopfzeile“ ist eigentlich ein UILabel. Ich habe die Ansicht aus der XIB-Datei instanziiert und erfolgreich den UILabel-Text festgelegt, aber die benutzerdefinierte UITableViewCell
wird nicht angezeigt, obwohl ich auch diesen Wert zugewiesen habe. Meine IBOutlet
s sind alle an IB angeschlossen.
Hier ist meine Instanziierung:
let popupView: VersePopupView = VersePopupView.instanceFromNib()
popupView.frame = CGRect(x: 10, y: 100, width: 300, height: 100)
popupView.assignVerseTableViewCell(cell: cell)
window.addSubview(popupView)
window.makeKeyAndVisible()
Und hier meine VersePopupView Klasse:
class VersePopupView: UIView {
@IBOutlet weak var cell: VerseTableViewCell!
@IBOutlet weak var title: UILabel!
@IBOutlet weak var headerView: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
class func instanceFromNib() -> VersePopupView {
return UINib(nibName: "VersePopupView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! VersePopupView
}
func assignVerseTableViewCell(cell: VerseTableViewCell)
{
// Assign it
self.cell = cell
// Get the verse details
if let verseDetails = cell.verse_details {
self.title.text = verseDetails.verseReference()
// Adjust the frame
// Adjust the text to be attributed text
// Set the title to the verse reference
// Anything else?
}
}
}
Was mache ich falsch, so dass die UITableViewCell nicht nach oben zeigt?
Gibt es dafür ein besseres Muster, als die UITableViewCell einzubetten?
Ich möchte Code (den ich in der Vergangenheit getan habe) nicht duplizieren, weil ich will, dass der Benutzer mit dem Popup genau wie sie in der Tabellenzelle interagieren würde.
Versuchen Sie nicht, eine Tabellenansicht Zelle außerhalb einer Tabellenansicht zu verwenden ... – matt
@matt - warum nicht? Welches Muster sollte ich dann verwenden? Wie vermeide ich es, alle UI-Elemente und Interaktionen mit diesen Elementen zu duplizieren? Ich kann das 'UITableViewCell' als ein Popup von selbst gut sehen. Wenn ich den zusätzlichen Header nicht brauchen würde, wäre ich gut. Aber ich brauche auch den Header. – thephatp
Nicht sicher, was Sie über die "Interaktionen" meinen. Dies ist keine View-Controller-Ansicht, sodass Sie keine Verbindung zu etwas außerhalb des View-Controllers herstellen können. Wie auch immer, wenn ich es wäre, hätte ich eine Ansicht xib und blicke in die Inhaltsansicht der Zelle und in die andere Ansicht. – matt