2014年12月13日土曜日

swift基礎 storyboardなしでTableViewを実装

swiftの基礎まとめシリーズ。
アプリ作成には避けて通れないTableViewの使い方です。

環境

  • Xcode Version 6.1 (6A1052d)

tableviewの実装

前回と同じように、storyboardを使わない実装方法です。
といってもobjective-c版とほとんど変化はありません。


import UIKit

class TestsViewController: UITableViewController {
    
    // tableviewで表示する配列
    var tests = [Test]()
    
    // testdata load
    func test() {
        // Do any additional setup after loading the view, typically from a nib.
        // self.navigationItem.leftBarButtonItem = self.editButtonItem()
        
        //let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "insertNewObject:")
        //self.navigationItem.rightBarButtonItem = addButton
        
        if tests.isEmpty {
            println("empty");
        } else {
            println("not empty");
        }
        
        var obj = Test(id: 1, testCode: "001", testName: "英語", imagePath: "asasa")
        tests.append(obj)
        
        var obj2 = Test(id: 2, testCode: "002", testName: "数学", imagePath: "asasa")
        tests.append(obj2)

        
        if tests.isEmpty {
            println("empty");
        } else {
            println(tests.count);
        }
        
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.test()
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier:"testcell")
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tests.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell:UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier:"testcell")
        let test = tests[indexPath.row] as Country
        
        cell.textLabel.text = test.testName
        return cell;
    }
    
    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    
    
    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let test = tests[indexPath.row]
        let resultViewController = ResultViewController()
        navigationController!.pushViewController(resultViewController, animated: true)
        
    }
    
    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == .Delete {
            //objects.removeObjectAtIndex(indexPath.row)
            //tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
        } else if editingStyle == .Insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
        }
    }

}


objective-cのテーブルviewより随分とスッキリした短いコードになっています。
一番のポイントは tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier:"testcell") です。
storyboardを使わない場合は、表示に利用するcellをviewDidLoadメソッドで登録しておく必要があります。カスタムセルを利用する場合も同様です。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...