iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Mobile Development

ios 的小小實驗室 !系列 第 7

DAY 7 『 TableView 』Part2

TableView:Storyboard + Table View + Table View Cell + Image View + Lable * 2

今天主要講解:

  1. 擴充 ViewController(UITableViewDelegate,UITableViewDataSource)
  2. delegate & dataSource 的拉線

擴充 ViewController(UITableViewDelegate,UITableViewDataSource)

extension ViewController: UITableViewDelegate,UITableViewDataSource{
    //tableView要顯示幾列
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return movies.count
    }
    //cell裏面要顯示什麼
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //我們要將dequeueReuseableCell 參照到剛剛建立的 cell 所以要 Downcasting (向下轉型) ::: as! TableViewCell :::
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MyTableViewCell
        // Cell contents setting
        cell!.ptView.image = movies[indexPath.row].image
        cell!.name.text = movies[indexPath.row].name
        cell!.date.text = movies[indexPath.row].date
        return cell!
    }
    func numberOfSections(in tableView: UITableView) -> Int { return 1 }
}

擴充ViewController

在 Storyboard 將 Table View 拉線到 View Controller,選擇 delegate & dataSource

點選這兩個選項

拉完後就會呈現這樣

附上完整程式碼

//MyTableViewCell
import UIKit

class MyTableViewCell: UITableViewCell {

    @IBOutlet var ptView: UIImageView!
    @IBOutlet var date: UILabel!
    @IBOutlet var name: UILabel!

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

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
}
//ViewController
import UIKit
struct mvs {
    var image : UIImage?
    var date : String?
    var name : String?
    
    init(image: UIImage, date: String, name: String){
        self.image = image
        self.date = date
        self.name = name
    }
}
class ViewController: UIViewController {

    var movies = [mvs]()
    func moviesitem(){
        movies.append(mvs(image: UIImage(named:"引爆摩天樓")! , date: "1997年4月19日", name: "引爆摩天樓"))
        movies.append(mvs(image: UIImage(named:"第14號獵物")!, date: "1998年4月18日", name: "第14號獵物"))
        movies.append(mvs(image: UIImage(named:"世紀末的魔術師")!, date: "1999年4月17日", name: "世紀末的魔術師"))
        movies.append(mvs(image: UIImage(named:"瞳孔中的暗殺者")!, date: "2000年4月22日", name: "瞳孔中的暗殺者"))
        movies.append(mvs(image: UIImage(named:"往天國的倒數計時")!, date: "2001年4月21日", name: "往天國的倒數計時"))
        movies.append(mvs(image: UIImage(named:"貝克街的亡靈")!, date: "2002年4月20日", name: "貝克街的亡靈"))
        movies.append(mvs(image: UIImage(named:"迷宮的十字路")!, date: "2003年4月19日", name: "迷宮的十字路"))
        movies.append(mvs(image: UIImage(named:"銀翼的奇術師")!, date: "2004年4月17日", name: "銀翼的奇術師"))
        movies.append(mvs(image: UIImage(named:"水平線上的陰謀")!, date: "2005年4月9日", name: "水平線上的陰謀"))
        movies.append(mvs(image: UIImage(named:"偵探們的鎮魂歌")!, date: "2006年4月15日", name: "偵探們的鎮魂歌"))
        movies.append(mvs(image: UIImage(named:"紺碧之棺")!, date: "2007年4月21日", name: "紺碧之棺"))
        movies.append(mvs(image: UIImage(named:"戰慄的樂譜")!, date: "2008年4月19日", name: "戰慄的樂譜"))
        movies.append(mvs(image: UIImage(named:"漆黑的追跡者")!, date: "2009年4月18日", name: "漆黑的追跡者"))
        movies.append(mvs(image: UIImage(named:"魯邦三世VS名偵探柯南")!, date: "2009年3月27日", name: "魯邦三世VS名偵探柯南"))
        tableView.reloadData()
    }
    
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        moviesitem()  
    }

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

extension ViewController: UITableViewDelegate,UITableViewDataSource{
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return movies.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MyTableViewCell
        cell!.ptView.image = movies[indexPath.row].image
        cell!.name.text = movies[indexPath.row].name
        cell!.date.text = movies[indexPath.row].date
        return cell!
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
}

這樣就完成啦!恭喜你學會 tableView 了,明天會有新的實作分享,敬請期待!


上一篇
DAY 6 『 TableView 』Part1
下一篇
DAY 8 『 CollectionView 』Part1
系列文
ios 的小小實驗室 !30

尚未有邦友留言

立即登入留言