Ho 2 sezioni nel mio UITableView.
Desidero che la prima sezione consenta la selezione di più celle e la seconda sezione per consentire solo una selezione singola.
Ho provato un po 'di codice ma non ha funzionato molto bene.
Codice in rapido se possibile. Grazie.UITableView - Selezione multipla E selezione singola
risposta
Forse si potrebbe implementare metodi delegato della vista tabella:
tableView(_:shouldHighlightRowAtIndexPath:)
e
tableView(_:didSelectRowAtIndexPath:)
... e determinare (da indexPath.row
e indexPath.section
) se la sezione pertinente supporta s ingl./selezione multipla (questo dipenderà dalla logica personalizzata del modello di dati -eg: "La sezione 0
supporta la selezione multipla ma la sezione 1
non"), e se supporta solo una selezione singola, controlla se è già selezionata una riga (accedendo a tableView.indexPathsForSelectedRows
).
Se c'è una riga selezionata già, è possibile:
- Ritorno
false
datableView(_:shouldHighlightRowAtIndexPath:)
, e - far nulla (solo
return
) datableView(_:didSelectRowAtIndexPath:)
(non sono sicuro se questo metodo è effettivamente chiamato quando si restituiscefalse
dashouldHighlight...
, quindi forse controllarlo).
Se si desidera che la riga selezionata nella sezione 2 sia la nuova riga selezionata, ciò potrebbe funzionare automaticamente. Altrimenti, segui @ la risposta di NicolasMiari.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 1 {
for i in 0..tableView.numberOfRowsInSection(indexPath.section) - 1 {
let cell: UITableViewCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: i, inSection: indexPath.section))!
if (i == indexPath.row) {
cell.accessoryType = .Checkmark
cell.selected = false
}
else {
cell.accessoryType = .None
}
}
}
else {
//Do whatever for the first section
}
}
Non molto elegante, ma si spera che possa darvi un'idea.
Si può semplicemente provare questo. Questa soluzione funziona perfettamente per me. Fate una prova forse ha lavorato per gli altri ...
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 0 {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
cell.accessoryType = .Checkmark
}
}
else {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
cell.accessoryType = .Checkmark
}
}
}
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 1 {
if let cell = tableView.cellForRowAtIndexPath(indexPath) {
cell.accessoryType = .None
}
}
}
Modificato: Per Swift-4
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 0 {
if let cell = tableView.cellForRow(at: indexPath) {
cell.accessoryType = .checkmark
}
}
else {
if let cell = tableView.cellForRow(at: indexPath) {
cell.accessoryType = .checkmark
}
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if indexPath.section == 1 {
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
cell.accessoryType = .none
}
}
}
Vuoi la seconda sezione per deselezionare la prima fila quando si seleziona la seconda fila? Inoltre, pubblicare il codice esistente aiuta. – Caleb