読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

UITableViewCellを使ってUITableView内のCellのレイアウトを変更する(その2)

概要

tiro105.hateblo.jp
の続き
今回はセルの中身を自分でレイアウトする方法をまとめる

詳細

セルの中身を自分でレイアウトする方法には2つの方法がある

  • 部品にタグをつけてタグにアクセスする方法
  • セルのカスタムクラスを作ってアクセスする方法

部品にタグをつけてタグにアクセスする方法

例のごとくテーブルビューをビューコントローラーにおき、dataSource,Delegate設定
f:id:tiro105:20150324155954p:plain
UITableViewCellを追加
f:id:tiro105:20150324160045p:plain
identifierをmyCellとする
f:id:tiro105:20150324160211p:plain
セルの中にLabel2つ追加
f:id:tiro105:20150324160316p:plain
それぞれのラベルのtagを1,2とする
f:id:tiro105:20150324160355p:plain

ここまで準備ができたらプログラム作成

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // IBで作ったmyCellという名前のcellを使う
        var cell = tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell
        // Tagが1の部品にアクセス
        var label1 = cell.viewWithTag(1) as UILabel
        label1.text = "セクション\(indexPath.section)の"
        // Tag2へアクセス
        var label2 = cell.viewWithTag(2) as UILabel
        label2.text = "\(indexPath.row)行目"
        
        return cell

    }
    // ステータスバー非表示
    override func prefersStatusBarHidden() -> Bool {
        return true;
    }

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

こんな感じ
f:id:tiro105:20150324161145p:plain

セルのカスタムクラスを作ってアクセスする方法

TableViewCellを追加し、identifierに「myCell」を追加するところまでは同じ
セル用のカスタムクラスを作成する
f:id:tiro105:20150324162025p:plain
f:id:tiro105:20150324162058p:plain
カスタムクラスをセルに紐づける
f:id:tiro105:20150324162132p:plain
セル中のラベルをカスタムクラスにOutletとして紐づける
f:id:tiro105:20150324162206p:plain

あとはプログラム
前回IBで作成したタグ指定していたcellがカスタムクラスになっている

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // IBで作ったmyCellという名前のcellを使う
        var cell = tableView.dequeueReusableCellWithIdentifier("myCell") as myTableViewCell

        // cellの各ラベルへテキスト挿入
        cell.myLabel1.text = "セクション\(indexPath.section)の"
        cell.myLabel2.text = "\(indexPath.row)行目"
        
        return cell

    }
    
    // ステータスバー非表示
    override func prefersStatusBarHidden() -> Bool {
        return true;
    }

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

参考

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】