■階層: NSObject > UIResponder > UIView > UIScrollView > UITableView

UITableViewはアイテム情報を行毎に表示するためのクラスです。

UIViewController内で生成する場合、通常UIViewControllerにUITableViewDataSourceプロトコルとUITableViewDelegateプロトコルを実装します。

目次

  • 1 生成
  • <li>
      <a href="#i-2"><span class="toc_number toc_depth_1">2</span> プロパティ</a><ul>
        <li>
          <a href="#delegate"><span class="toc_number toc_depth_2">2.1</span> delegate</a>
        </li>
        <li>
          <a href="#dataSource"><span class="toc_number toc_depth_2">2.2</span> dataSource</a>
        </li>
        <li>
          <a href="#editing"><span class="toc_number toc_depth_2">2.3</span> editing</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#i-3"><span class="toc_number toc_depth_1">3</span> メソッド</a><ul>
        <li>
          <a href="#setEditinganimated"><span class="toc_number toc_depth_2">3.1</span> setEditing:animated:</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#i-4"><span class="toc_number toc_depth_1">4</span> サンプル</a>
    </li>
    <li>
      <a href="#i-5"><span class="toc_number toc_depth_1">5</span> 参考情報</a>
    </li>
    

生成

initWithFrame:style:

指定されたフレームとスタイルを利用してオブジェクトを生成します。

let tableView = UITableView(frame:CGRectMake(10, 10, 300, 600), style:UITableViewStyle.Plain)

プロパティ

delegate

UITableViewで発生するイベントを処理するためのデリゲートを設定するためのプロパティ。

■定義

weak var delegate: UITableViewDelegate?

■使用例: selfはUITableViewDelegateを実装している必要がある。

tableView.delegate = self

dataSource

UITableViewに表示するデータを供給するためのプロパティ。

■定義

weak var dataSource: UITableViewDataSource?

■使用例: selfはUITableViewDataSourceを実装している必要がある。

tableView.dataSource = self

editing

UITableViewが編集モードかどうかを表すプロパティ

■定義

var editing: Bool

■使用例: 値を設定した場合animated = NOで呼び出される。

tableView.editing = editing

メソッド

setEditing:animated:

UITableViewの編集モードを変更するメソッド。

■定義

func setEditing(_ editing: Bool, animated animated: Bool)

■使用例: editing=YES/NO。animated=YES/NO。

tableView.setEditing(editing, animated: animated)

サンプル

  • ストーリーボードを利用してUITableViewを設置。
  • delegateとdataSourceもストーリーボードで設定。
  • Editor > Embed in Navigation Controllerでナビゲーションコントローラーを追加。
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!
    
    var rows = ["りんご", "バナナ", "パイナップル", "もも", "かき"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.leftBarButtonItem = editButtonItem()
        
        // UITableViewをプログラムから生成する場合
        // ただしオートレイアウトを使う場合ストーリーボードを使った方が簡単です。
//        let tableView = UITableView(frame:CGRectMake(10, 10, 300, 600), style:UITableViewStyle.Plain)
//        self.view.addSubview(tableView)
    }

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

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //UITableViewDataSource: データの個数を返す
        return rows.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        //UITableViewDataSource: セールにデータを設定する
        let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "myCell")
        cell.textLabel?.text = rows[indexPath.row]
        cell.backgroundColor = UIColor.lightGrayColor()
        return cell
    }
    
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        //UITableViewDelegate: セールがタップされたときの処理
        print(rows[indexPath.row])
    }
    
    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)
        tableView.setEditing(editing, animated: animated)
    }
}

実行結果。Editボタンを押すことで編集モードに入ります。

S 2016 05 27 16 51 38

参考情報