performSegue
를 사용하여 뷰 컨트롤러 간에 데이터를 전달하는 방법은 iOS 앱 개발에서 자주 사용되는 기능 중 하나입니다. 데이터를 전달하는 방법은 여러 가지가 있지만, 여기서는 두 가지 일반적인 방법을 설명하겠습니다.
1. Segue를 통한 데이터 전달: 이 방법은 데이터를 전달할 뷰 컨트롤러에서 prepare(for:sender:)
메서드를 오버라이드하여 데이터를 받는 뷰 컨트롤러로 전달하는 방법입니다.
보내는 뷰 컨트롤러:
class SendingViewController: UIViewController {
// 전달할 데이터를 준비
var dataToSend: String = "Hello, destination!"
// Segue를 실행할 액션 메서드
@IBAction func performSegueButtonTapped(_ sender: UIButton) {
performSegue(withIdentifier: "YourSegueIdentifier", sender: self)
}
// Segue를 실행하기 전에 호출되는 메서드
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "YourSegueIdentifier" {
// 데이터를 받는 뷰 컨트롤러에 데이터 전달
if let destinationVC = segue.destination as? ReceivingViewController {
destinationVC.receivedData = dataToSend
}
}
}
}
받는 뷰 컨트롤러:
class ReceivingViewController: UIViewController {
// 받은 데이터를 저장할 변수
var receivedData: String = ""
// 데이터 사용
override func viewDidLoad() {
super.viewDidLoad()
print(receivedData) // "Hello, destination!"
}
}
2. 뷰 컨트롤러 인스턴스 변수를 활용한 데이터 전달: 이 방법은 보내는 뷰 컨트롤러에서 받는 뷰 컨트롤러의 인스턴스 변수에 직접 데이터를 할당하는 방법입니다.
보내는 뷰 컨트롤러:
class SendingViewController: UIViewController {
// Segue를 실행할 액션 메서드
@IBAction func performSegueButtonTapped(_ sender: UIButton) {
performSegue(withIdentifier: "YourSegueIdentifier", sender: self)
}
// Segue를 실행하기 전에 호출되는 메서드
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "YourSegueIdentifier" {
// 데이터를 받는 뷰 컨트롤러의 인스턴스를 가져와서 데이터 전달
if let destinationVC = segue.destination as? ReceivingViewController {
destinationVC.receivedData = "Hello, destination!"
}
}
}
}
받는 뷰 컨트롤러:
class ReceivingViewController: UIViewController {
// 받은 데이터를 저장할 변수
var receivedData: String = ""
// 데이터 사용
override func viewDidLoad() {
super.viewDidLoad()
print(receivedData) // "Hello, destination!"
}
}
이러한 방법을 사용하여 performSegue
를 통해 데이터를 성공적으로 전달할 수 있습니다. 전달할 데이터의 유형에 따라 적절한 데이터 타입을 사용하여 데이터를 전달해야 합니다.
performSegue(withIdentifier:sender:)
메서드를 사용하여 화면 전환을 수행할 때 데이터를 전달하는 방법은 아래와 같이 두 가지 방법으로 나뉩니다. 아래의 예시는 Swift 언어를 기준으로 설명합니다.
1. Segue를 통한 데이터 전달
Segue를 통해 다음 화면으로 데이터를 전달하는 방법은 prepare(for:sender:)
메서드를 사용하는 것입니다. 이 메서드는 Segue가 수행되기 전에 호출되며, 여기서 데이터를 다음 화면으로 전달할 수 있습니다.
1-1. 데이터를 전달할 다음 화면(View Controller)를 정의합니다. (이 예시에서는 “NextViewController”라고 가정합니다.)
import UIKit
class NextViewController: UIViewController {
var receivedData: String?
// 이후 데이터를 사용하는 로직을 작성할 수 있습니다.
}
1-2. 데이터를 전달하는 화면에서 prepare(for:sender:)
메서드를 구현합니다.
import UIKit
class CurrentViewController: UIViewController {
// 전달할 데이터를 정의합니다.
let dataToSend = "Hello, Next View Controller!"
// 다음 화면으로 데이터를 전달하는 메서드를 구현합니다.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "YourSegueIdentifier" { // Segue의 Identifier를 적절하게 변경해주세요.
if let nextViewController = segue.destination as? NextViewController {
nextViewController.receivedData = dataToSend
}
}
}
// 다음 화면으로 전환하는 버튼을 누르면 Segue를 수행합니다.
@IBAction func goToNextScreenButtonTapped(_ sender: UIButton) {
performSegue(withIdentifier: "YourSegueIdentifier", sender: self) // Segue의 Identifier를 적절하게 변경해주세요.
}
}
2. 직접 인스턴스를 생성하여 데이터 전달
Segue를 사용하지 않고, 다음 화면의 인스턴스를 직접 생성하여 데이터를 전달하는 방법입니다. 이 방법은 Segue를 사용하지 않으므로, 화면 전환을 수동으로 처리해야 합니다.
2-1. 데이터를 전달할 다음 화면(View Controller)를 정의합니다. (이 예시에서는 “NextViewController”라고 가정합니다.)
import UIKit
class NextViewController: UIViewController {
var receivedData: String?
// 이후 데이터를 사용하는 로직을 작성할 수 있습니다.
}
2-2. 데이터를 전달하는 화면에서 다음 화면의 인스턴스를 직접 생성하고 데이터를 전달합니다.
import UIKit
class CurrentViewController: UIViewController {
// 전달할 데이터를 정의합니다.
let dataToSend = "Hello, Next View Controller!"
// 다음 화면으로 데이터를 전달하는 메서드를 호출합니다.
@IBAction func goToNextScreenButtonTapped(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil) // Main.storyboard 파일명으로 변경해주세요.
if let nextViewController = storyboard.instantiateViewController(withIdentifier: "NextViewController") as? NextViewController {
nextViewController.receivedData = dataToSend
navigationController?.pushViewController(nextViewController, animated: true)
}
}
}
위의 두 가지 방법 중 하나를 선택하여 데이터를 다음 화면으로 전달할 수 있습니다. Segue를 통한 전환은 Interface Builder에서 화면 전환을 설정하고 수행하는 방식이므로 더 간단한 방법입니다. 반면에 직접 인스턴스를 생성하여 전환하는 방법은 Segue를 사용하지 않으므로, 더 많은 제어권을 가지고 화면 전환을 처리할 수 있습니다. 사용에 따라 적절한 방법을 선택하시면 됩니다.