您的位置:首页 > 移动开发 > Swift

Swift 实现简单自定义TableViewCell

2014-09-29 14:15 302 查看
自定义cell其实还是比较简单的,个人理解,直接把自己需要的控件添加为子视图就行了。

下面直接给出简单代码块:

TableViewCell.swift代码块如下:

class TableViewCell: UITableViewCell {
var title:UILabel!
var clickBtn:UIButton!

override func awakeFromNib() {
super.awakeFromNib()
}

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
if !self.isEqual(nil) {
title = UILabel(frame: CGRectMake(20, 20, 200, 30))
self.contentView.addSubview(title)
clickBtn = UIButton(frame: CGRectMake(200, 20, 60, 30))
clickBtn.setTitle("app", forState: UIControlState.Normal)
clickBtn.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
clickBtn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted)
self.contentView.addSubview(clickBtn)
}
}

required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}


ViewController.swift代码块如下:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var table:UITableView!
var array = ["item1","item2","item3","item4","item5","item6","item7"]
override func viewDidLoad() {
super.viewDidLoad()
title = "FirstApp"
var view: UIView = UIView(frame: self.view.frame)
view.backgroundColor = UIColor.whiteColor()
self.view.addSubview(view)

var leftButton:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Edit, target: self, action:"leftCall:")

self.navigationItem.leftBarButtonItem = leftButton

var rightButton:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "rightCall:")

self.navigationItem.rightBarButtonItem = rightButton

var rect  = self.view.frame
rect.origin.y += 65
table = UITableView(frame: rect)
table.registerClass(TableViewCell.self, forCellReuseIdentifier: "cell")

self.view.addSubview(table)

table.delegate = self
table.dataSource = self
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 60
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var str:String = "cell"

var cell:TableViewCell = tableView.dequeueReusableCellWithIdentifier(str, forIndexPath: indexPath) as TableViewCell

if cell.isEqual(nil) {
cell = TableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: str)
}
cell.title.text = array[indexPath.row]

cell.clickBtn.tag = indexPath.row
cell.clickBtn.removeTarget(self, action: "tableViewCellClicked:", forControlEvents: UIControlEvents.TouchUpInside)
cell.clickBtn.addTarget(self, action: "tableViewCellClicked:", forControlEvents: UIControlEvents.TouchUpInside)

return cell
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == UITableViewCellEditingStyle.Delete  {
array.removeAtIndex(indexPath.row)
table.reloadData()
}
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("clicked at \(indexPath.row)")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func leftCall(sender:AnyObject) {
table.setEditing(!table.editing, animated: true)
var btn:UIBarButtonItem = sender as UIBarButtonItem
btn.title = "Done"
println("leftButton pressed")
}
func rightCall(sender:AnyObject) {
array.append("新建cell")
table.reloadData()
println("rightButton pressed")
}
func tableViewCellClicked(sender:AnyObject) {
println("tableViewCell appButton at \((sender as UIButton).tag) clicked")
}
}

以上便是swift中自定义TableViewCell的简单实现,第一次写blog,有错得地方希望大神指教,当然实现自定义TableViewCell的方式不止这一种。

代码链接:http://download.csdn.net/detail/xyybaozhen/7991673
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息