Richten Sie Ihre Beschriftungen in Ihrer benutzerdefinierten Zellklasse ein und verwenden Sie dann cellForRow
, um die Daten zu senden.
import UIKit
class cellClass: UITableViewCell {
@IBOutlet weak var containerView: UIView!
func addViews(jsonStuff: [String]){
let rect = CGRect(x: 0, y: 0, width: 100, height: 20)
var x = 50 as CGFloat
let y = 20.0 as CGFloat
var position = CGPointMake(x, y)
for str in jsonStuff{
let label = UILabel(frame: rect)
label.text = str
label.center = position
containerView.addSubview(label)
x = x + 40
//y = y + 20
position = CGPointMake(x,y)
}
}
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var table: UITableView!
var stringStuff = ["this", "that", "tje", "blah", "hey"]
override func viewDidLoad() {
super.viewDidLoad()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return stringStuff.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! cellClass
if indexPath.row < 2{
let sub = stringStuff[0...2]
cell.addViews(Array(sub))
}else{
cell.addViews(stringStuff)
}
return cell
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
}

Dies ist wahrscheinlich ein riesiger Hack, und ich bin sicher, es gibt bessere Möglichkeiten, aber hier ist einige Funktionscode, der die Zeile dynamisch ohne Verwendung von automatischen Layout oder vordefinierten Etiketten Größe wird. Sie werden wahrscheinlich mit den richtigen Höhen herumspielen müssen, um alles richtig aussehen zu lassen, und die Untersichten zum Entfernen in cellForRowAtIndexPath werden für die Wiederverwendung von Zellen benötigt.
class cellClass: UITableViewCell {
@IBOutlet weak var containerView: UIView!
func addViews(lbsToAdd: Int) {
let rctHeight = Int((5 + (lbsToAdd * 20)))
let rect = CGRect(x: 6, y: 10, width: Int(containerView.frame.width-12), height: rctHeight)
containerView.backgroundColor = UIColor.lightGrayColor()
let view1 = UIView(frame: rect)
view1.layer.shadowColor = UIColor.blackColor().CGColor
view1.layer.masksToBounds = false
view1.layer.shadowOpacity = 0.2
view1.layer.shadowOffset = CGSizeMake(-1, 1)
view1.layer.cornerRadius = 2
view1.backgroundColor = UIColor.whiteColor()
let x = 2 as CGFloat
var y = 0 as CGFloat
for i in 1...lbsToAdd {
let recti = CGRect(x: x, y: y, width: 50, height: 20)
let s = UILabel(frame: recti)
s.text = "\(i)"
y = y + 20
containerView.frame.size.height = containerView.frame.size.height + 20
view1.addSubview(s)
print(i)
}
containerView.addSubview(view1)
}
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var testTable: UITableView!
var stringStuff = ["Jetta", "<Golf>", "Passat", "CC", "Beetle", "Ford", "Chevy", "Nissan"]
let labelsCount = 10
override func viewDidLoad() {
super.viewDidLoad()
testTable.delegate = self
testTable.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return stringStuff.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let total = ((Int(indexPath.row) + 2) * 2)
return CGFloat(total * labelsCount)
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as? cellClass
cell?.containerView.subviews.forEach({ $0.removeFromSuperview() })
cell?.addViews(indexPath.row + 1)
return cell!
}
}

Ich bin mehr neugierig wie ich die Etiketten dynamisch erstellen? Ich kann nicht einfach das Label zu der Zelle im Storyboard hinzufügen, da ich zum Beispiel zwei Labels in einer Zelle und 8 in der anderen benötige. – Recusiwe
Erstellen Sie eine Funktion in Ihrer benutzerdefinierten Zellklasse, um eine Anzahl von Labels zu generieren.Führen Sie dann einfach einen Code wie diesen in einer for-Schleife aus 'var label = UILabel (Rahmen: CGRectMake (0, Nummer, 200, 21)) label.center = CGPointMake (160, 284) label.textAlignment = NSTextAlignment.Center label.text = "Ich bin ein Testetikett" self.view.addSubview (label) ' – Haligen
Ich werde es versuchen! Aber ich muss n Anzahl der Etiketten nach der Anzahl bestimmter Daten erstellen, die ich vom JSON bekomme, wie kann ich das bekommen, wenn ich die Etiketten in meiner benutzerdefinierten Zellklasse anlege? – Recusiwe