Ich arbeite mich durch BigNerdRanch iOS-Programmierung. Im Moment arbeite ich an der Bronze Herausforderung in Kapitel 11 (Subclassing UITableViewCell)Ändern von UITableViewCell, wo soll dieser Code platziert werden? Verwirrt über Designmuster
Herausforderung:
Aktualisieren der ItemCell die valueInDollars in grün angezeigt werden, wenn der Wert kleiner als 50 ist und rot, wenn der Wert größer ist als oder gleich 50
Meine Lösung ist:
cell.valueLabel.textColor = item.valueInDollars < 50 ? UIColor.redColor() : UIColor.greenColor()
Nun stellte ich diese Logik in meinem ItemsViewController (UITableViewController), Tableview (cellForRowAtIndexPath) -Funktion.
// Get a new or recycled cell
let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: indexPath) as! ItemCell
// Update the labels for the new preferred text size
cell.updateLabels()
if (itemStore.allItems.count == indexPath.row) {
cell.nameLabel.text = "No more items!"
cell.serialNumberLabel.text = ""
cell.valueLabel.text = ""
} else {
// Set the test on the cell with the description of the item
// that is at the nth index of items, where n = row this cell
// will appear in on the tableview
let item = itemStore.allItems[indexPath.row]
cell.nameLabel.text = item.name
cell.serialNumberLabel.text = item.serialNumber
cell.valueLabel.text = "$\(item.valueInDollars)"
cell.valueLabel.textColor = item.valueInDollars < 50 ? UIColor.redColor() : UIColor.greenColor()
}
return cell
Ist es besser Praxis die Logik in der Steuerung oder in der ItemCell Klasse wie solche zu platzieren?
class ItemCell: UITableViewCell {
@IBOutlet var nameLabel: UILabel!
@IBOutlet var serialNumberLabel: UILabel!
@IBOutlet var valueLabel: UILabel!
func updateLabels() {
let bodyFont = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
nameLabel.font = bodyFont
valueLabel.font = bodyFont
let caption1Font = UIFont.preferredFontForTextStyle(UIFontTextStyleCaption1)
serialNumberLabel.font = caption1Font
}
func updateValueTextColor(forValue value: Int) {
valueLabel.textColor = value < 50 ? UIColor.redColor() : UIColor.greenColor()
}
}
Im vorigen Kapitel sprachen sie über Dependency Inversion Principle und Design Patterns wie MVC und Dependency Injection. Ist dies eine Anwendung eines dieser Konzepte? Mit Injection Dependency erwähnen sie, dass Sie nicht möchten, dass ein Objekt annimmt, welche Objekte auf niedrigerer Ebene verwendet werden müssen. Verwechsle ich dieses Designmuster mit Model View Controller, wo die Zelle nichts über die Logik des Inhalts wissen sollte? Ich versuche, all diese Konzepte und Muster zu verstehen und em zu identifizieren.
danke für die Rückmeldung! – gofly
Wenn Sie denken, dass meine Antwort Ihnen geholfen hat, denken Sie bitte daran, die Antwort zu akzeptieren, indem Sie auf dieses Häkchen klicken. @ user2521203 – Sweeper