반응형

 

(왼)viewController, (오)SecondViewController

두개의 뷰컨트롤러를 생성하여,

 

첫번째 뷰컨트롤러에는 버튼 1개와, 라벨 1개

두번째 뷰컨트롤러에는 버튼 1개를 만들어 주었다.

 

 

로직

1. 첫번째 뷰컨트롤러의 버튼을 클릭하면, 두번째로 화면이 넘어가고

2. 두번째 뷰컨에서 버튼을 클릭하면 데이터를 가져와서 라벨에 띄우고, 창을 종료한다.

 

상속 받아서, 확장할 protocol을 하나 만들어준다. (new swift파일을 하나 생성하였다.)

import Foundation


//class나 AnyObject를 상속받는다면, 오직 class에서만 사용 가능하다.
protocol deliveryDataProtocol: AnyObject {
    func deliverydata(_ data:String)
}

 

 

첫번째 뷰 컨트롤러

import UIKit

//채택
class ViewController: UIViewController, deliveryDataProtocol{
    
    //라벨가져오기
    @IBOutlet weak var afterText: UILabel!
    
    //프로토콜 확장.
    func deliverydata(_ data: String) {
        //두번째에서 데이터를 받아와서 라벨에 띄어줄 것이다.
        afterText.text = data
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
    }

    
    //화면 이동
    @IBAction func nextPageButton(_ sender: Any) {
        //두번째 뷰컨트롤러를 가져옴
        guard let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
        
        //위임
        vc.delegate = self
        
        //화면 이동
        self.present(vc, animated: true, completion: nil)
      
    }
    
}

두번째 뷰 컨트롤러

import UIKit

class SecondViewController: UIViewController {
    
    //두번째 화면에서는 delegate의 property 생성
    //protocol에서 오직 이 프로토콜은 클래스에서만 사용이 가능하다라는것이 명시되어 있을 때 "weak"를 쓴다.
    weak var delegate:deliveryDataProtocol?
    

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    
    //이전으로 돌아가면서 데이터 전달하는 버튼을 클릭
    @IBAction func goBack(_ sender: Any) {
        //데이터 전달
        delegate?.deliverydata("안녕하세요~")
        //화면 닫기
        self.dismiss(animated: true, completion: nil)
    }
    
}

 

 

 

받은 에러 : Unknown class SecondViewController in Interface Builder file.

 

해결 :

module 연결 되어 있는지 꼭 확인 바람

반응형

+ Recent posts