UITableViewのカスタムセルの描画について
現在、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()
}
}