1. 程式人生 > >Swift 實現簡單自定義TableViewCell

Swift 實現簡單自定義TableViewCell

自定義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