꾸준히 안타치기
세그(Segue) / 화면전환 본문
se·gue|séɡwei|명사《이탈리아어》1.〔음악〕세구에: 한 악장·악부(樂部)에서 사이를 두지 않고 계속하는 일.2.앞의프로그램과 끊어지지 않고 계속되는 프로그램.동사, 자동사1.〔음악〕 (바로 뒤의 악장·악부로) 계속하다, 계속해서 연주하다. 2.단절 없이 계속되다. 3.〔…에서; …으로〕 변신하다 〔from …; to …〕.
세그는 IOS에서 여러화면을 사용할 경우, 화면 전환을 위해 사용된다.
UIStoryboardSegue 클래스
UIStoryboardSegue 클래스는 UIKit에서 사용할 수 있는 표준 화면전환을 위한 프로퍼티와 메서드를 포함하고 있습니다.
또 커스텀 전환을 정의하기 위해 서브클래스를 구현해서 사용할 수도 있습니다. 필요에 따라서 UIViewController의 performSegue(withIdentifier:sender:)메서드를 사용하여 세그 객체를 코드로 실행할 수 있습니다.
세그(Segue) 객체는 뷰 컨트롤러의 뷰 전환과 관련된 정보를 가지고 있습니다. 세그는 뷰 컨트롤러의 뷰를 다른 뷰 컨트롤러의 뷰로 전환할 때 뷰 컨트롤러의 prepare(for:sender:) 메서드를 사용하여 새로 보여지는 뷰 컨트롤러에 데이터를 전달할 수 있습니다.
주요 프로퍼티
- var source: UIViewController : 세그에 전환을 요청하는 뷰 컨트롤러입니다.
- var destination: UIViewController : 전환될 뷰 컨트롤러입니다.
- var identifier: String? : 세그 객체의 식별자입니다.
https://www.boostcourse.org/mo326/lecture/16893?isDesc=false
TableViewController.swift의 리스트 아이템을 눌러 다음화면으로 전달.
// 리스트 아이템을 클릭했을때 데이터를 넘겨주는 코드
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
// 눌러어서 넘어가는 ViewController의 이름이 DetailViewController이다.
guard let nextViewController: DetailViewController =
segue.destination as? DetailViewController else{
return
}
guard let cell: UITableViewCell = sender as? UITableViewCell else{
return
}
// 다음 뷰컨트롤러로 셀에 담겨있는 데이터를 textToset에 담아서 전달한다.
nextViewController.textToSet = cell.textLabel?.text
}
전체소스
import UIKit
class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var tableView: UITableView!
let cellIdentifier: String = "cell"
// 커스텀셀 설정
let customCellIdentifier:String="customCell"
let korean: [String] = ["가","나","다","라","마","바","가","나","다","라","마","바"]
let english: [String] = ["A","B","C","D","E","F","A","B","C","D","E","F"]
var dates: [Date] = []
// 데이트피커 설정
let dateFormatter: DateFormatter = {
let formatter: DateFormatter = DateFormatter()
formatter.dateStyle = .short
return formatter
}()
// 타임포매터 설정
let timeFormatter: DateFormatter = {
let formatter: DateFormatter = DateFormatter()
formatter.timeStyle = .short
return formatter
}()
// 버튼을 누를때 마다 테이블 뷰를 업데이트 한다.
@IBAction func touchUPAddButton(_ sender: UIButton){
dates.append(Date())
// 전체데이터를 다가져오는 함수
// self.tableView.reloadData()
// 새로추가된 것만 가져오는 함수 + 애니메이션
self.tableView.reloadSections(IndexSet(2...2), with:
UITableView.RowAnimation.automatic)
}
override func viewDidLoad(){
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
}
// 섹션을 몇개를 보여줄지?
func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
// 섹션마다 무엇을 보여줄지?
func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int)->Int{
switch section{
case 0:
return korean.count
case 1:
return english.count
case 2:
return dates.count
default:
return 0
}
}
// 줄에 해당하는 셀보여주기 // 셀을 돌려주는 곳
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath)-> UITableViewCell{
if indexPath.section < 2 {
let cell : UITableViewCell =
tableView.dequeueReusableCell(withIdentifier:self.cellIdentifier,for: indexPath)
let text: String = indexPath.section == 0 ? korean[indexPath.row] :
english[indexPath.row]
cell.textLabel?.text = text
// 셀컬러 변경하기 (1번째 행만 레드이고, 나머지는 흰색으로 설정해라.)// 셀의 재사용
if indexPath.row == 1{
cell.backgroundColor = UIColor.red
}else{
cell.backgroundColor = UIColor.white
}
return cell
// 3번째 추가하는 커스텀 셀 ( as! CustomTableViewCell 강제캐스팅 )
}else{
let cell: CustomTableViewCell =
tableView.dequeueReusableCell(withIdentifier: self.customCellIdentifier, for: indexPath) as!
CustomTableViewCell
cell.leftLabel.text = self.dateFormatter.string(from: self.dates[indexPath.row])
cell.rightLabel.text = self.timeFormatter.string(from: self.dates[indexPath.row])
return cell
}
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section:
Int) -> String?{
if section < 2 {
return section == 0 ? "한글" : "영어"
}
return nil
}
// 리스트 아이템을 클릭했을때 데이터를 넘겨주는 코드
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
guard let nextViewController: DetailViewController =
segue.destination as? DetailViewController else{
return
}
guard let cell: UITableViewCell = sender as? UITableViewCell else{
return
}
nextViewController.textToSet = cell.textLabel?.text
}
}
데이터를 받아서 보여주는 DetailViewController.swift
import UIKit
class DetailViewController: UIViewController {
// 프로퍼티 생성
var textToSet: String?
// 눌러서 넘겨준 텍스트
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
// 화면이 보이기 직전에 textToset에 들어갈 데이터를 받아온다.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.textLabel.text = self.textToSet
}
}
'iOS > storyboard & code' 카테고리의 다른 글
액션시트 / 얼럿 (0) | 2021.12.27 |
---|---|
사진첩에서 이미지 가져오기 / 삭제하기 (0) | 2021.12.26 |
TableVIew / custom (0) | 2021.12.21 |
테이블뷰 / DataSource와 Delegate (0) | 2021.12.21 |
사진첩에서 사진 가져오기, datepicker (0) | 2021.12.21 |