第三话中讲解了如何利用系统内置的cell格式,这一话来谈谈如何自定义cell格式.在stroyboard中通过拖拽为cell添加内容,并且通过属性检测器修改样式,下面是我简单设置的一个自定义cell。
因为cell是自定义的,所以需要创建一个文件与cell关联,新建一个文件,注意创建的是一个cocoa touch class,如下图所示
在新建的cell的代码中添加界面上的cell的属性,让这些属性与前台的展示页面进行交互,3个label和一个image都是outlet展示。连线都是IB开头的,增加属性后的代码如下
class CustomTableViewCell: UITableViewCell { @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var locationLabel: UILabel! @IBOutlet weak var typeLabel: UILabel! @IBOutlet weak var thumbnailImageView: UIImageView! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } }
代码改写完毕后,需要把storyboard中的cell的类型指定为我们刚刚创建的cell类型并且把我们在类中定义的属性与前台连接起来,依旧是拖拽方式,如下图:
回到viewController中,复用一下前两话中tableview的代码,由于要使用我们自己定义的cell,所以把viewDidLoad之前关于cell的代码删掉。
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. }
现在回到cell的代理方法中,调用我们自定义的cell,注意cell的属性也要用我们自己设置的,注意代码的复用,代理方法的代码如下
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let identiString = "Cell" //代码复用 let cell = tableView.dequeueReusableCellWithIdentifier(identiString,forIndexPath : indexPath) as CustomTableViewCell cell.nameLabel.text = restaurantNames[indexPath.row] var imageName = restaurantImages[indexPath.row] cell.thumbnailImageView.image = UIImage(named: imageName) cell.typeLabel.text = "hello" cell.accessoryType = UITableViewCellAccessoryType.DetailButton return cell }
运行效果如图所示:
怎么样,cell的样式尽在我们的掌控之中,是不是很有成就感?