2016-08-04 9 views
-1

Ich versuche derzeit, die Zellen eines UITableView durchzuschleifen, um bestimmte UILabels in der zugehörigen ViewController enthalten.Schleife durch einzelne UITableViewCells in UITableView, um Text in Zellen zu bearbeiten

Wie würde ich das machen?

Kontext: Das Array specialBool enthält 6 Boole. Die Indexposition entspricht einem Produkt, das entweder speziell ist oder nicht. Wenn das Bool wahr ist, möchte ich, dass das Label (previousPrice) in dieser bestimmten Produktzelle gestrichen wird ... wenn es falsch ist, sollte das Label normal bleiben.

Dies ist mein Code so weit. Es ist unvollständig:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! exploreTableView 

cell.photo.image = globalVariable.images[indexPath.row] 
cell.name.text = globalVariable.names[indexPath.row] 
cell.price.text = globalVariable.prices[indexPath.row] 
cell.unitPrice.text = globalVariable.unitPrice[indexPath.row] 
cell.pPrice.text = globalVariable.previousPrice[indexPath.row] 

    var i = 0 
    while i < globalVariable.previousPrice.count { 
     if (globalVariable.specialBool[i] == true) { 

      // Strike through previous price 
      let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: globalVariable.previousPrice[i]) 
      attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length)) 
      cell.pPrice.attributedText = attributeString; 

     } else { 
      cell.pPrice.text = globalVariable.previousPrice[i] 

     } 
     i += 1 
    } 

    return cell 
} 
+0

Bitte fügen Sie die relevanten Teile des Codes zu Ihrer Frage als Text, nicht als Bild. – JAL

Antwort

1

Sie sollten zuerst verstehen, was Sie tun und was Sie tun möchten. Gute Kenntnisse von UITableView

Sie brauchen nicht die while-Schleife und auch cellForRowAtIndexPath Aufrufe für jede sichtbare Zellen (diese Zellen für andere Indexpfade wiederverwendet).

//Remove while loop and var i = 0 

//This will call for each visible cell so replace `i` with indexPath.row 
if globalVariable.specialBool[indexPath.row] == true { 
// do your work here 
} 
0

Warum durchlaufen Sie jede Zelle? Innerhalb Ihrer Tabelle Delegate-Methode: cellForRowAtIndexPath:, implementieren Sie Ihren Code, um das Etikett zu verwalten.

BOOL boolVal = [array objectAtIndex:indexPath.row]; 
if (boolVal) { 
    //strike out previous price label. 
}else { 
    //keep the label normal. 
} 

Wann immer Sie eine Schleife durch die Zellen wollen, nur [tableView reloadData] rufen alle Zellen in UITableView neu zu laden.

Verwandte Themen