-
[ios - Swift] Delegate를 사용해서 뷰에 데이터 전송하기ios 2020. 11. 30. 18:00
이번 글에서는 델리게이트를 사용해서 뷰에 데이터를 전송하는 것을 목표로 코드를 작성했습니다.
A, B 컨트롤러를 구현 후 A 컨트롤러에서는 데이터 전송, B 컨트롤러에서는 데이터를 수신을 할 수 있도록 하겠습니다.
이미지와 같이 A, B 두 가지의 UIViewController와 클래스를 구현합니다.
뷰 구현이 끝났다면. Swift 파일을 생성 후 사용할 델리게이트 코드를 작성해 주도록 합니다.
import Foundation protocol MessageDelegate : class { func SendMessage(pMessage: String?) }
프로토콜이 무엇인지는 검색하면 자세히 나오니 궁금하신 분은 따로 찾아보면 됩니다.
먼저 데이터를 전송받을 B 컨트롤러를 구현하도록 할 텐데 작성한 MessageDelegate를 선언하면 아래와 같은 문구가 나오는 것을 확인할 수 있습니다.
이는 프로토콜 내 함수가 해당 뷰 컨트롤러 내 구현되지 않아 나오는 것으로 Fix를 눌러서 구현하면 됩니다.
import UIKit class BController: UIViewController, MessageDelegate { var ReciveText: String? @IBOutlet weak var mMainLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() if ReciveText != nil { mMainLabel.text = ReciveText } } func SendMessage(pMessage: String?) { ReciveText = pMessage } }
B 컨트롤러를 코드를 보면 MessageDelegate.swift 에서 작성한 SendMessage를 이용해 라벨 텍스트를 수정하도록 구현하였습니다.
A 뷰 컨트롤러에 버튼을 추가 후 코드를 작성해 보도록 하겠습니다.
import UIKit class AController: UIViewController { weak var myDelegate: MessageDelegate? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func viewMove(_ sender: Any) { let controller = self.storyboard?.instantiateViewController(identifier: "BController") as! BController self.myDelegate = controller self.navigationController?.pushViewController(controller, animated: true) myDelegate?.SendMessage(pMessage: "메시지를 전송합니다.") } }
self.myDelegate = controller
myDelegate의 대리자를 B컨트롤러로 설정하는 것이라고 생각하면 될 것 같습니다.
SendMessage는 Push 전 후 작성하더라도 사용 가능합니다.
'ios' 카테고리의 다른 글
[ios - Swift] Push 알림 사용하기 (UNUserNotificationCenter 1/2) (0) 2020.12.06 [ios - Swift] 카메라, 앨범 권한 설정 (2) 2020.12.01 [ios - Swift] 키보드 사용시 뷰 올리기 (0) 2020.11.26 [ios - Swift] UITableView 특정 위치로 이동 (0) 2020.11.26 [ios - Swift] UIView.Xib 사용하기 (0) 2020.11.24