Swift UItableView Custom cell programmatically (documentation)? Swift UItableView Custom cell programmatically (documentation)? ios ios

Swift UItableView Custom cell programmatically (documentation)?


enter image description here

I just played little bit. Even though all the colors/fonts are not quite right, this will give you good starting point. Hope it helps you.

class Stock {var name: String?var action: String?var price: String?init(stockData: [String: AnyObject]) {    if let n = stockData["stockName"] as? String {        name = n    }    if let a = stockData["action"] as? String {        action = a    }    if let p = stockData["stockPrice"] as? Float {        price = NSString(format: "%.2f", p)    }}var backgroundColor: UIColor {    if action == "sell" {        return UIColor.greenColor()    }    return UIColor.blueColor()}var typeColor: UIColor {    if action == "sell" {        return UIColor.blackColor()    }    return UIColor.purpleColor()}var priceLabelColor: UIColor {    if action == "sell" {        return UIColor.redColor()    }    return UIColor.greenColor()}}class StockCell: UITableViewCell {let padding: CGFloat = 5var background: UIView!var typeLabel: UILabel!var nameLabel: UILabel!var priceLabel: UILabel!var stock: Stock? {    didSet {        if let s = stock {            background.backgroundColor = s.backgroundColor            priceLabel.text = s.price            priceLabel.backgroundColor = s.priceLabelColor            typeLabel.text = s.action            typeLabel.backgroundColor = s.typeColor            nameLabel.text = s.name            setNeedsLayout()        }    }}override init(style: UITableViewCellStyle, reuseIdentifier: String?) {    super.init(style: style, reuseIdentifier: reuseIdentifier)    backgroundColor = UIColor.clearColor()    selectionStyle = .None    background = UIView(frame: CGRectZero)    background.alpha = 0.6    contentView.addSubview(background)    nameLabel = UILabel(frame: CGRectZero)    nameLabel.textAlignment = .Left    nameLabel.textColor = UIColor.blackColor()    contentView.addSubview(nameLabel)    typeLabel = UILabel(frame: CGRectZero)    typeLabel.textAlignment = .Center    typeLabel.textColor = UIColor.whiteColor()    contentView.addSubview(typeLabel)    priceLabel = UILabel(frame: CGRectZero)    priceLabel.textAlignment = .Center    priceLabel.textColor = UIColor.whiteColor()    contentView.addSubview(priceLabel)}required init(coder aDecoder: NSCoder) {    fatalError("init(coder:) has not been implemented")}override func prepareForReuse() {    super.prepareForReuse()}override func layoutSubviews() {    super.layoutSubviews()    background.frame = CGRectMake(0, padding, frame.width, frame.height - 2 * padding)    typeLabel.frame = CGRectMake(padding, (frame.height - 25)/2, 40, 25)    priceLabel.frame = CGRectMake(frame.width - 100, padding, 100, frame.height - 2 * padding)    nameLabel.frame = CGRectMake(CGRectGetMaxX(typeLabel.frame) + 10, 0, frame.width - priceLabel.frame.width - (CGRectGetMaxX(typeLabel.frame) + 10), frame.height)}}

in your view controller

var stocks: [Stock] = []override func viewDidLoad() {    super.viewDidLoad()    view.backgroundColor = UIColor.whiteColor()    for stockData in dataArray {        var stock = Stock(stockData: stockData)        stocks.append(stock)    }    tableView = UITableView(frame: view.bounds, style: .Grouped)    tableView.delegate = self    tableView.dataSource = self    tableView.separatorStyle = .None    tableView.registerClass(StockCell.self, forCellReuseIdentifier: NSStringFromClass(StockCell))    view.addSubview(tableView)}func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {    return stocks.count}func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {    let cell = tableView.dequeueReusableCellWithIdentifier( NSStringFromClass(StockCell), forIndexPath: indexPath) as StockCell    cell.stock = stocks[indexPath.row]    return cell}func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {    return 70}

Custom Cell

class StockCell: UITableViewCell {let padding: CGFloat = 5var background: UIView!var typeLabel: UILabel!var nameLabel: UILabel!var priceLabel: UILabel!var stock: Stock? {    didSet {        if let s = stock {            background.backgroundColor = s.backgroundColor            priceLabel.text = s.price            priceLabel.backgroundColor = s.priceLabelColor            typeLabel.text = s.action            typeLabel.backgroundColor = s.typeColor            nameLabel.text = s.name            setNeedsLayout()        }    }}override init(style: UITableViewCellStyle, reuseIdentifier: String?) {    super.init(style: style, reuseIdentifier: reuseIdentifier)    backgroundColor = UIColor.clearColor()    selectionStyle = .None    background = UIView(frame: CGRectZero)    background.alpha = 0.6    contentView.addSubview(background)    nameLabel = UILabel(frame: CGRectZero)    nameLabel.textAlignment = .Left    nameLabel.textColor = UIColor.blackColor()    contentView.addSubview(nameLabel)    typeLabel = UILabel(frame: CGRectZero)    typeLabel.textAlignment = .Center    typeLabel.textColor = UIColor.whiteColor()    contentView.addSubview(typeLabel)    priceLabel = UILabel(frame: CGRectZero)    priceLabel.textAlignment = .Center    priceLabel.textColor = UIColor.whiteColor()    contentView.addSubview(priceLabel)}required init(coder aDecoder: NSCoder) {    fatalError("init(coder:) has not been implemented")}override func prepareForReuse() {    super.prepareForReuse()}override func layoutSubviews() {    super.layoutSubviews()    background.frame = CGRectMake(0, padding, frame.width, frame.height - 2 * padding)    typeLabel.frame = CGRectMake(padding, (frame.height - 25)/2, 40, 25)    priceLabel.frame = CGRectMake(frame.width - 100, padding, 100, frame.height - 2 * padding)    nameLabel.frame = CGRectMake(CGRectGetMaxX(typeLabel.frame) + 10, 0, frame.width - priceLabel.frame.width - (CGRectGetMaxX(typeLabel.frame) + 10), frame.height)}}