IOS&Mac

[swift] Table View 다루기

MOVE🔥 2023. 2. 27. 13:55
728x90
반응형

 

1. list 생성 및 Data 추가


var list = [SulVO]()

override func viewDidLoad() {
    var sul = SulVO()
    sul.name = "맥주"
    sul.price = 4000
    self.list.append(sul)
    
    sul = SulVO()
    sul.name = "소주"
    sul.price = 4000
    self.list.append(sul)
    
}

2. list Data 출력


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      // 출력할 목록 셀 개수 반환
			return self.list.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // 셀 객체 생성 후 반환한다.
		// 여기서 데이터 출력 설정한다.
    let row = self.list[indexPath.row]
    let cell = tableView.dequeueReusableCell(withIdentifier: "ListCell")!
    cell.textLabel?.text = row.name
    return cell
}

3. list Data 선택시


override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // 셀 선택시 호출된다.
		// 셀 데이타 넘겨주고 화면이동
    guard let asvc = self.storyboard?.instantiateViewController(identifier: "AddSulVC") as? AddSulViewController else{return}
    asvc.curSul = self.list[indexPath.row]
    self.navigationController?.pushViewController(asvc, animated: true)
}

4. List Data Reload


override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        fetchData()
        tableView.reloadData()
    }

5. Swipe Data Delete


override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if(editingStyle == .delete){
            // TODO :: 삭제 한번더 물어보는 alert창
            // DB에서 목록 삭제
            var deleteSulQ = "delete from sulListTB where name = \\"" + self.list[indexPath.row].name + "\\";"
            if( myDB.commitQuery(query: deleteSulQ) ){
                self.list.remove(at: indexPath.row)
                //TableView에서 삭제
                tableView.deleteRows(at: [indexPath], with: .fade)
            }else{
                // TODO :: 삭제에 실패했습니다 alert
            }
        }
    }
728x90
반응형