본문 바로가기

Mobile/IOS & Swift

테이블뷰 기초

테이블 뷰 기초

class ViewController: UIViewController, UITableViewDataSource,UITableViewDelegate{
 

테이블을 사용하기 위해선 뷰 컨트롤러에 해당 두개의 클래스를 상속받는다.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return datalist.count
    }

먼저 사용할만큼의 테이블 개수를 리턴하여준다.

//셀을 하나하나 리턴해주는 함수
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
      ..code...
    }
 

리턴한 숫자만큼 listview의 스크롤을 생성하여준다
숫자만큼 위 내용이 실행되는게 아니라 스크롤을 내릴때 해당 내용만큼 더 렌더링되는 방식

//dequeue 큐에서 빼서 resuable 재사용하겠다.
        //안보이는것은 렌더링 안되고 보이는 부분만 계속 렌더링 시킴
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
 

indexPath.row를 통하여 현재 몇번째 데이터이며 해당 데이터에 맞는 내용들을
뷰에 넣어준다.

 
        var dicTemp = datalist[indexPath.row]
        
        cell.textLabel!.text = dicTemp["지역"]
        
          
        let weatherStr = dicTemp["날씨"]
        
        //셀의 종류에 맞게 (디테일라벨이 있는거) 해야한다. 아니면  optional nil 오류가 리턴된다.
        cell.detailTextLabel!.text = weatherStr
        
        if weatherStr == "맑음"{
            cell.imageView!.image = UIImage(named: "sunny.png")
        }else if weatherStr == "비"{
        cell.imageView!.image = UIImage(named: "rainy.png")
        }else if weatherStr == "흐림"{
            cell.imageView!.image = UIImage(named: "cloud.png")
        }else if weatherStr == "눈"{
            cell.imageView!.image = UIImage(named: "snow.png")
        }else if weatherStr == "맑음"{
            cell.imageView!.image = UIImage(named: "blizzard.png")
        }
        
        return cell