Ich habe eine Tabellenansicht, die eine Liste von Elementen anzeigt, und jedes Mal, wenn eine Zeile ausgewählt wird, wird ein Häkchen hinzugefügt und eine bestimmte Menge wird zu var total
hinzugefügt.Wählen Sie die Zeile einmal aus und führen Sie die Berechnung aus. Swift
Wenn eine andere Zeile ausgewählt ist, wird dasselbe Verhalten wie oben ausgeführt und der vorherige Betrag für die nicht ausgewählte Zeile wird abgezogen. Auch die nicht ausgewählte Zeile erhält kein Häkchen.
Das Problem ist, dass wenn eine Zeile mehrmals ausgewählt wird, wird der Betrag entsprechend der ausgewählten Zeile hinzugefügt.
Was ich will, ist, den Betrag, der der Zeile entspricht, nur einmal hinzuzufügen, unabhängig davon, wie oft die Zeile ausgewählt ist.
class EighthViewController: UIViewController, UITableViewDelegate,UITableViewDataSource {
var total = 0
struct Item {
var name:String // name of the row
var selected:Bool // whether is selected or not
}
var frequency = [
Item(name:"Every week",selected: false),
Item(name:"Every 2 weeks",selected: false),
Item(name:"Every 4 weeks",selected: false),
Item(name:"Once",selected: false),
Item(name:"End of tenancy cleaning", selected: false)
]
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return frequency.count
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
// configure the cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
-> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell")
cell?.textLabel?.text = frequency[indexPath.row].name
return cell!
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .Checkmark
if indexPath.row == 0 {
self.total += 30
print(total)
} else if indexPath.row == 1 {
self.total += 30
print(total)
} else if indexPath.row == 2 {
self.total += 30
print(total)
} else if indexPath.row == 3 {
self.total += 40
print(total)
} else if indexPath.row == 4 {
self.total += 44
print(total)
}
}
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .None
if indexPath.row == 0 {
self.total -= 30
print(total)
} else if indexPath.row == 1 {
self.total -= 30 // delete previous amount
print(total)
} else if indexPath.row == 2 {
self.total -= 30 // delete previous amount
print(total)
} else if indexPath.row == 3 {
self.total -= 40 // delete previous amount
print(total)
} else if indexPath.row == 4 {
self.total -= 44 // delete previous amount
print(total)
}
}
}
Danke für Ihre Hilfe. Es gibt einige Probleme mit dem von Ihnen bereitgestellten Code. In der ersten Version wird jedes Mal, wenn eine Zeile ausgewählt wird, der Betrag, der der Zeile entspricht, zu "total" addiert. Das Häkchen verschwindet nicht. Wenn in der zweiten Version mehrere Zeilen ausgewählt sind, wird der Betrag zu "total" addiert, wenn sie abgewählt werden, wird der Betrag abgezogen, aber die zuvor ausgewählte Zeile verliert nicht ihr Häkchen und der Betrag, der in einer neuen Zeile inkrementiert wurde ausgewählt. – bibscy
Das Verhalten, das ich suche, ist: 1. Zeile auswählen -> Betrag hinzufügen, Häkchen hinzufügen. 1.1 Zeile erneut auswählen -> nichts passiert. 2.1. Wählen Sie eine andere Zeile aus, setzen Sie das Häkchen für die vorherige Zeile auf .Keine, ziehen Sie den zuvor hinzugefügten Betrag von der Summe ab, fügen Sie der neu ausgewählten Zeile ein Häkchen hinzu, und fügen Sie der ausgewählten Zeile einen Betrag hinzu. Danke – bibscy
@bogdanbarbulescu Uhmm sehen aktualisierte Antwort, Ihre Frage war nicht sehr klar beim ersten Mal, jetzt ist es klar. Ich hoffe, das hilft Ihnen –