pagecontol로 page를 넘길때마다 tableview에 다른 데이터를 표시하고 싶었음
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var firstTextField: UITextField!
@IBOutlet weak var secondTestField: UITextField!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var pageControl: UIPageControl!
var dictionary: [String: [String]] = [:] // 빈 딕셔너리 Key: String, value: [String]
var array : [String] = [""] // array, ""를 넌 이유가 있었는데 기억안남ㅋ
var currentIndex: String = "" // 현재 표시할 배열의 Index 값
var dictionaryIndex: [String] = [] // 현재 표시할 딕셔너리의 배열값
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.tableView.dataSource = self
pageControl.currentPage = 0 // pageControl 현재페이지
pageControl.pageIndicatorTintColor = .lightGray
pageControl.currentPageIndicatorTintColor = .black
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture(_:))) // 왼쪽 스와이프
swipeLeft.direction = UISwipeGestureRecognizer.Direction.left
self.view.addGestureRecognizer(swipeLeft)
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture(_:))) // 오른쪽 스와이프
swipeRight.direction = UISwipeGestureRecognizer.Direction.right
self.view.addGestureRecognizer(swipeRight)
pageControl.isHidden = true // 페이지컨트롤 ui 안보이게
// currentIndex = array[pageControl.currentPage]
// dictionaryIndex = dictionary[currentIndex] ?? []
}
@objc func respondToSwipeGesture(_ gesture: UIGestureRecognizer) { // 스와이프했을때 실행할 함수
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizer.Direction.left: // 왼쪽스와이프
if (pageControl.currentPage < pageControl.numberOfPages - 1) {
pageControl.currentPage = pageControl.currentPage + 1
}
case UISwipeGestureRecognizer.Direction.right: // 오른쪽스와이프
if (pageControl.currentPage > 0) {
pageControl.currentPage = pageControl.currentPage - 1
}
default: break
}
currentIndex = array[pageControl.currentPage] // 현재 페이지에 해당하는 array index값
dictionaryIndex = dictionary[currentIndex] ?? [] // 현재 페이지에 해당하는 dictionary key값의 배열
tableView.reloadData()
}
}
@IBAction func addButton(_ sender: Any) {
let str = firstTextField.text! // 첫번째 텍스트필드의 텍스트
let str2 = secondTestField.text! // 두번째 텍스트필드의 텍스트
if array.contains(str) { // array에 str 있을때
dictionary[str]?.append(str2) // dictionary 해당 str key의 value에 str2 추가
} else {
array.append(str) // array에 str값 저장
dictionary[str] = [str2] // dictionary에 key: str, value [str2] 값 저장
}
if array.contains("") == true {
array.removeFirst() // 첫 저장할때 array에 저장돼있던 "" 값 지우기
}
currentIndex = array[pageControl.currentPage] // 현재 페이지에 해당하는 array index값
dictionaryIndex = dictionary[currentIndex] ?? []// 현재 페이지에 해당하는 dictionary key값의 배열
pageControl.numberOfPages = array.count // array 개수만큼 pageControl 만들기
tableView.reloadData()
}
@IBAction func pageChanged(_ sender: Any) {
currentIndex = array[pageControl.currentPage] // 현재 페이지에 해당하는 array index값
dictionaryIndex = dictionary[currentIndex] ?? [] // 현재 페이지에 해당하는 dictionary key값의 배열
tableView.reloadData()
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dictionaryIndex.count // 현재 페이지에 하당하는 dictionary key값의 배열의 개수
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TableViewCell else {
return UITableViewCell()
}
cell.keyLabel.text = currentIndex
cell.valueLabel.text = dictionaryIndex[indexPath.row]
return cell
}
}
class TableViewCell: UITableViewCell {
@IBOutlet weak var keyLabel: UILabel!
@IBOutlet weak var valueLabel: UILabel!
}
'ios 개발' 카테고리의 다른 글
[iOS] Delegate를 이용하여 뷰컨트롤러간 데이터 전송하기 (0) | 2021.09.05 |
---|---|
[iOS] Closure를 이용하여 뷰컨트롤러간 데이터 전송하기 (0) | 2021.09.05 |
[ios] UserDefaults 이용해서 tableView 저장하기 (0) | 2021.08.08 |
[ios]textfield 터치시 DatePicker 나오게 하기 (0) | 2021.08.06 |
[ios] 테이블뷰 기초 (0) | 2021.08.05 |