2016-10-29 7 views
1

Ich habe einen Array-Typ von String-Arrays und ich es tableView innerhalb for loop.Ich weiß es eine schlechte Übung Schleife innerhalb cellForRowAt indexPath: Funktion, aber ich habe keine solution.My Problem ist auf i mehr Subviews einfügen jedes Mal, wenn ich meine tableview auf Simulator bewegen, ones.it vorhandene ältere überschrieben und iSwift 3 UITableView Zellseparator verschwindet, wenn ich Zelle Subviews entfernen

for view in cell.subviews { 
     view.removeFromSuperview() 
} 

verwenden, um zu verhindern, aber es löscht meine Zelle seperators mit meinem älteren Zell Etiketten. Wie kann ich nur Zellendaten entfernen, nicht meine Trennzeichen?

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

    var cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell 
    //print(cell.subviews) 
    for view in cell.subviews { 
     view.removeFromSuperview() 
    } 


    for i in 0..<globalHeaderStructArray.count{ 
     var newLabel = UILabel(frame: CGRect(x:xCoordination, y:10, width:Double(globalHeaderStructArray[i].width)!, height:30.0)) 
     newLabel.font = UIFont(name: "Avenir", size: 17.0) 
     newLabel.textColor = UIColor.darkGray 
     newLabel.text = "\(globalDataArray[indexPath.row][i])" 

     var scrollview = UIScrollView(frame: cell.bounds) 
     scrollview.contentSize = CGSize(width:cell.bounds.width * 5, height:cell.bounds.height) // will be 5 times as wide as the cell 
     scrollview.isPagingEnabled = true 

     cell.contentView.addSubview(scrollview) 
     cell.addSubview(newLabel) 
     xCoordination += Double(globalHeaderStructArray[i].width)! 
    } 
    xCoordination = 0.0 

    return cell 

} 

Antwort

0

Sie können tag auf Ihr Etikett gesetzt und scrollView Objekt und prüfen Sie, dass Looping wie diese.

for view in cell.subviews { 
    if view.tag == 101 || view tag == 102 { 
     view.removeFromSuperview() 
    } 
} 


for i in 0..<globalHeaderStructArray.count{ 
    var newLabel = UILabel(frame: CGRect(x:xCoordination, y:10, width:Double(globalHeaderStructArray[i].width)!, height:30.0)) 
    newLabel.font = UIFont(name: "Avenir", size: 17.0) 
    newLabel.textColor = UIColor.darkGray 
    newLabel.text = "\(globalDataArray[indexPath.row][i])" 
    newLabel.tag = 101 

    var scrollview = UIScrollView(frame: cell.bounds) 
    scrollview.contentSize = CGSize(width:cell.bounds.width * 5, height:cell.bounds.height) // will be 5 times as wide as the cell 
    scrollview.isPagingEnabled = true 
    scrollview.tag = 102 

    cell.contentView.addSubview(scrollview) 
    cell.addSubview(newLabel) 
    xCoordination += Double(globalHeaderStructArray[i].width)! 
} 

Tipps: Es ist Teig, wenn Sie Interface Builder verwenden, um Ihre Zelle zu entwerfen, anstatt UI Element zur Laufzeit hinzuzufügen.

+0

Wie können wir _never_ die Verwendung von mehrdeutigen Tags fördern, es sei denn, 100% absolut notwendig (was extrem selten ist und normalerweise für ältere Architekturprobleme verantwortlich ist)? Wenn Sie eine Referenz benötigen, verwenden Sie Zeiger ..... – TheCodingArt

Verwandte Themen