Custom UITableViewCell programmatically using Swift

前端 未结 3 1298
旧时难觅i
旧时难觅i 2020-11-29 18:15

Hey all I am trying to create a custom UITableViewCell, but I see nothing on the simulator. Can you help me please.

I can see the label only if I

3条回答
  •  遥遥无期
    2020-11-29 19:15

    Let's make a few assumptions:

    You have an iOS8 project with a Storyboard that contains a single UITableViewController. Its tableView has a unique prototype UITableViewCell with custom style and identifier: "cell".

    The UITableViewController will be linked to Class TableViewController, the cell will be linked to Class CustomTableViewCell.

    You will then be able to set the following code (updated for Swift 2):

    CustomTableViewCell.swift:

    import UIKit
    
    class CustomTableViewCell: UITableViewCell {
    
        let imgUser = UIImageView()
        let labUserName = UILabel()
        let labMessage = UILabel()
        let labTime = UILabel()
    
        override func awakeFromNib() {
            super.awakeFromNib()
    
            imgUser.backgroundColor = UIColor.blueColor()
    
            imgUser.translatesAutoresizingMaskIntoConstraints = false
            labUserName.translatesAutoresizingMaskIntoConstraints = false
            labMessage.translatesAutoresizingMaskIntoConstraints = false
            labTime.translatesAutoresizingMaskIntoConstraints = false
    
            contentView.addSubview(imgUser)
            contentView.addSubview(labUserName)
            contentView.addSubview(labMessage)
            contentView.addSubview(labTime)
    
            let viewsDict = [
                "image": imgUser,
                "username": labUserName,
                "message": labMessage,
                "labTime": labTime,
            ]
    
            contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[image(10)]", options: [], metrics: nil, views: viewsDict))
            contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[labTime]-|", options: [], metrics: nil, views: viewsDict))
            contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[username]-[message]-|", options: [], metrics: nil, views: viewsDict))
            contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[username]-[image(10)]-|", options: [], metrics: nil, views: viewsDict))
            contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[message]-[labTime]-|", options: [], metrics: nil, views: viewsDict))
        }
    
    }
    

    TableViewController.swift:

    import UIKit
    
    class TableViewController: UITableViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            //Auto-set the UITableViewCells height (requires iOS8+)
            tableView.rowHeight = UITableViewAutomaticDimension
            tableView.estimatedRowHeight = 44
        }
    
        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
        }
    
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 100
        }
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell
    
            cell.labUserName.text = "Name"
            cell.labMessage.text = "Message \(indexPath.row)"
            cell.labTime.text = NSDateFormatter.localizedStringFromDate(NSDate(), dateStyle: .ShortStyle, timeStyle: .ShortStyle)
    
            return cell
        }
    
    }
    

    You will expect a display like this (iPhone landscape): enter image description here

提交回复
热议问题