2017-12-31 116 views
0
ändern

Ich versuche, die Farbe einer Beschriftung (oder Beschriftungen) in einer Zelle zu ändern, wenn der Wert von alarmLevel! = "0" ist. Dies ist, was ich bisher habe, und es ändert die Farbe der cell.locationLabel in allen Zellen statt nur derjenigen, die die if-Anweisung erfüllen. Ich bin mir sicher, dass es etwas mit dem IndexPath zu tun hat, aber ich kann es nicht herausfinden.Textfarbe der Beschriftung in der Zelle mit der Anweisung if

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = myTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ViewControllerTableViewCell 
    cell.locationLabel.text = eventsList[indexPath.row].location 
    cell.eventTimeLabel.text = eventsList[indexPath.row].dateTime 
    cell.eventTypeLabel.text = eventsList[indexPath.row].agencyEventSubtypeCode 
    cell.agencyIdLabel.text = eventsList[indexPath.row].agencyId 

    if alarmLevel != "0" { 
     cell.locationLabel.textColor = UIColor.red 
    } else { 
     cell.locationLabel.textColor = UIColor.black 
    } 
    return cell 
} 
+0

Bitte Ihr Problem erklären wir Ihnen – user3601599

+0

machen helfen möchte ich die Etiketten von nur die Zelle, die Alarmstufe ist! = 0 sein rot . Der obige Code macht die Beschriftungen in allen Zellen rot, was ich NICHT möchte. – jvan

+0

Sie scheinen für jede Ausführung von 'tableView (_: cellForRowAt:)' denselben 'alarmLevel'-Wert zu verwenden. Vielleicht möchten Sie den entsprechenden Wert verwenden, ähnlich wie bei den anderen Eigenschaften. – Cristik

Antwort

0

Sie müssen die alarmLevel als Integer-Variable auf der Liste der Ereignisse Array-Typ hinzuzufügen. Und ändern Sie diesen Integer-Wert nach Ihrem Bedarf für jedes event Element im Array eventsList

class Events { 
    var location = String() 
    var dateTime = String() 
    var agencyEventSubtypeCode = Int() 
    var agencyId = Int() 
    var alarmLevel = Int() //Need this here 
} 

var eventsList = [Events]() 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

let cell = myTableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! ViewControllerTableViewCell 
cell.locationLabel.text = eventsList[indexPath.row].location 
cell.eventTimeLabel.text = eventsList[indexPath.row].dateTime 
cell.eventTypeLabel.text = ("\(eventsList[indexPath.row].agencyEventSubtypeCode)") 
cell.agencyIdLabel.text = ("\(eventsList[indexPath.row].agencyId)") 

if eventsList[indexPath.row].alarmLevel != 0 { 
    cell.locationLabel.textColor = UIColor.red 
} else { 
    cell.locationLabel.textColor = UIColor.black 
} 
return cell 
} 
+0

Ich habe eine Klasse Ereignisse, bei denen ich die Variable alarmLevel habe. Sie kommt tatsächlich als String. Ich habe meine if-Anweisung wie folgt geändert: if eventsList [indexPath.row] .alarmLevel! = "0" { cell.locationLabel.textColor = UIColor.rot } sonst { cell.locationLabel.textColor = UIColor.black } .. ...... aber jetzt ändert sich die Farbe überhaupt nicht. – jvan

+0

Kein Problem eine Klasse oder eine Struktur es ist das gleiche Nur die Klasse, die Sie erben können und die Struktur-Nr. Du hast gesagt, dass alarmLevel ein Zeichenfolgenwert in deiner Klasse ist. Ich werde den Code ändern, um deinen Bedürfnissen zu entsprechen, aber ich ziehe es vor, dass du ganzzahlig verwendest, dass es immer eine Zahl ist und keine Zeichen enthalten sind. Dann musst du nur bekommen der alarmLevel-Wert, während Sie Ihre Array-EventsLists durchlaufen. –

+0

Drucken Sie den Wert alarmLevel auf Ihrer Konsole während der Schleife aus und stellen Sie sicher, dass der Wert geändert wird. Wenn der Wert in jedem Element in Ihrem Array eventsList gleich ist, ändert sich die Textfarbe natürlich nicht. –

Verwandte Themen