2017-02-22 5 views
2

Ich verwende eine UITableView mit benutzerdefinierten Zellen. Jede Zelle hat ihre eigene NIB-Datei und einen Controller. In einer Zelle möchte ich dem Benutzer ermöglichen, ein Datum auszuwählen. Ein Standarddatum wird in der Zelle angezeigt. Wenn der Benutzer auf die Zelle klickt, sollte ein UIPickerView auf der Zelle erweitern. Ich habe mehrere ähnliche Fragen im Forum gefunden, aber alle verwenden eine zusätzliche Zelle, die die UIPickerView enthält. In meiner App muss ich eine Nib-Datei verwenden, die sowohl das Label als auch den Pickerview enthält. Wenn die Zelle angeklickt wird, sollte ich vielleicht die PickerView anzeigen und die Zellenhöhe aktualisieren und wenn die Zelle erneut angeklickt wird, sollte ich sie verstecken und die Höhe erneut aktualisieren. Ich habe irgendwo ein Beispiel gesehen, aber es wurde in Objective-C geschrieben. Denkst du, dass es möglich ist, es auf diese Weise zu implementieren, und gibt es ein schnelles Beispiel?Erweitern Sie TableViewCell, ohne eine zusätzliche Zelle zu verwenden

+0

Es gibt Möglichkeiten, es zu tun. Zeig uns, was du bisher versucht hast und wo du geblieben bist. – arunjos007

+0

Der einfachste Weg ist die Verwendung von Auto-Layout, um die Höhe Ihrer Zellen zu definieren. Dies bedeutet, dass Einschränkungen zwischen dem Inhalt der Zelle und sich selbst hinzugefügt werden. Wenn Sie dann Ihre Auswahlfunktion anzeigen möchten, ändern Sie die Eigenschaft "constant" einer Integritätsbedingung so, dass die Zelle erweitert wird, sodass die Auswahl angezeigt wird. – paulvs

Antwort

3

Nun, um dieses Problem zu lösen, müssen Sie einfach einen festen vertikalen Abstand zwischen Etikett und Picker in Ihrer Zellenansicht einrichten. Siehe Screenshot

fixed vertical spacing

Dann jedes Mal Benutzer auf Zelle tippt man einfach Tabellenansicht mit aktualisierten Höhe für die Zelle neu zu laden. Hier ist der Quellcode:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

@IBOutlet weak var tableView: UITableView! 

fileprivate var cellExpanded = false 

// MARK: - UITableView datasource & delegate 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "PickerCell")! 

    return cell 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return (cellExpanded) ? 260:44 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    cellExpanded = !cellExpanded 
    tableView.reloadData() 
} 
} 
Verwandte Themen