Ho cercato di implementare una funzione nella mia app in modo che quando un utente tocca una cella nella mia vista tabella, la cella si espande verso il basso per rivelare le note. Ho trovato molti esempi di questo in Objective-C, ma devo ancora trovarne uno per Swift.Espandi cella quando viene toccata in Swift
Questo esempio sembra perfetto: Accordion table cell - How to dynamically expand/contract uitableviewcell?
ho avuto un tentativo di tradurre a Swift:
var selectedRowIndex = NSIndexPath()
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedRowIndex = indexPath
tableView.beginUpdates()
tableView.endUpdates()
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if selectedRowIndex == selectedRowIndex.row && indexPath.row == selectedRowIndex.row {
return 100
}
return 70
}
Tuttavia questo sembra solo per mandare in crash l'applicazione.
Qualche idea?
Edit:
Ecco il mio codice cellForRowAtIndexPath:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:CustomTransactionTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomTransactionTableViewCell
cell.selectionStyle = UITableViewCellSelectionStyle.None
if tableView == self.searchDisplayController?.searchResultsTableView {
cell.paymentNameLabel.text = (searchResults.objectAtIndex(indexPath.row)) as? String
//println(searchResults.objectAtIndex(indexPath.row))
var indexValue = names.indexOfObject(searchResults.objectAtIndex(indexPath.row))
cell.costLabel.text = (values.objectAtIndex(indexValue)) as? String
cell.dateLabel.text = (dates.objectAtIndex(indexValue)) as? String
if images.objectAtIndex(indexValue) as NSObject == 0 {
cell.paymentArrowImage.hidden = false
cell.creditArrowImage.hidden = true
} else if images.objectAtIndex(indexValue) as NSObject == 1 {
cell.creditArrowImage.hidden = false
cell.paymentArrowImage.hidden = true
}
} else {
cell.paymentNameLabel.text = (names.objectAtIndex(indexPath.row)) as? String
cell.costLabel.text = (values.objectAtIndex(indexPath.row)) as? String
cell.dateLabel.text = (dates.objectAtIndex(indexPath.row)) as? String
if images.objectAtIndex(indexPath.row) as NSObject == 0 {
cell.paymentArrowImage.hidden = false
cell.creditArrowImage.hidden = true
} else if images.objectAtIndex(indexPath.row) as NSObject == 1 {
cell.creditArrowImage.hidden = false
cell.paymentArrowImage.hidden = true
}
}
return cell
}
Qui ci sono le impostazioni di uscita:
Questa parte non ha senso per me: 'se selectedRowIndex == selectedRowIndex. fila'? – zisoft
Provare a creare 'NSIndexPath' bit differentyl' var selectedRow = NSIndexPath (forRow: 0, inSection: 0) ' – Kirsteins
@zisoft Bene l'esempio che stavo basando su off ha' selectedRowIndex && indexPath.row == selectedRowIndex.row' ma se Provo ad usarlo per ottenere l'errore: Digitare NSIndexPath non è conforme al protocollo 'Tipo booleano' – user3746428