現在、SwiftでUITableViewを使ったiOSアプリを作っています.

カスタムセルを使って各行ごとに5項目のデータを表示するのですが、UILabelで表示すると行数が増えていくにつれ処理が重くなっていくので、UIViewにdrawRectで直接文字を描画し、そのUIViewをカスタムセルのContentViewへAddSubViewして表示することにしました。

しかし、最初に画面が出てきたときに、表示領域内の最下行に表示されるはずのデータが、他の行にも表示されてしまいます。

イメージとしては、

このように表示したいのに


20    2014-02-24    XXX   YYY   ZZZ
19    2014-02-23    XXX   YYY   ZZZ
18    2014-02-22    XXX   YYY   ZZZ
17    2014-02-21    XXX   YYY   ZZZ
16    2014-02-20    XXX   YYY   ZZZ


このように表示されてしまいます。


16    2014-02-20    XXX   YYY   ZZZ
16    2014-02-20    XXX   YYY   ZZZ
16    2014-02-20    XXX   YYY   ZZZ
16    2014-02-20    XXX   YYY   ZZZ
16    2014-02-20    XXX   YYY   ZZZ


一度スクロールすると正しく表示されるようになるのですが、スクロールが早すぎると、同じ値が2,3行続けて表示されるなど、一部おかしくなってしまいます。

どなたか、ご教示お願いします。

以下ソース

import UIKit

//drawRect用
public var tmpDrawData = [String]();

class ViewController: UIViewController,UITableViewDataSource, UITableViewDelegate, {

    //Outlet
    @IBOutlet weak var TableView: UITableView!

    //SwiftData(SQLite用ライブラリ)
    var _myDBData = DBData();   



    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        //TableView Delegate
        TableView.delegate = self;
        TableView.dataSource = self;

    }

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

    override func viewWillAppear(animated: Bool) {
        //TableView
        TableView.reloadData();
    }

    //行数
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return _myDBData.getAll()[0].count;
    }

    //行設定
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as CustomCell;

        //SQLiteに保存されたデータをすべて取り出す
        let allData: [[String]] = _myDBData.getAll()

        //drawRect用データを破棄、各行ごとに新しく用意
        tmpDrawData.removeAll();

        for (var i = 0; i < 5; i++){
            tmpDrawData.append(allData[i][indexPath.row])
        }

        //drawRect
        var cellView: UIView = DrawCustomCell(frame: cell.bounds)
        cellView.backgroundColor = UIColor.clearColor();

        //ContentViewに残っているSubviewを消して新しく追加
        removeAllSubViews(cell.ContentView);
        cell.ContentView.addSubview(cellView);

        return cell
    }

    //Header
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        //drawRect
        let HeaderView: UIView = MakeHeader(frame: CGRectMake(0, 0, 475, 50))
        HeaderView.backgroundColor = UIColor.clearColor();

        return HeaderView;

    }

    //Header's Height
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50;
    }

    //Cell's Height
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 40;
    }


}

//SubView全削除
func removeAllSubViews(parentView: UIView){
    var subviews = parentView.subviews
    for sv in subviews{
        sv.removeFromSuperview()
    }
}