작성
·
329
0
이전에 modalPresentationStyle로 질문 남겼던 사람입니다.
”’translangVC.modalPresentationStyle = .overCurrentContext”’
투명처리는 잘 되었는데 이 코드를 사용하고 다시 그 전 VC로 넘어가면 viewWillApear가 정상적으로 호출되지 않는 문제가 있었는데요
답변으로 팝업에 delegate를 주시라고 했는데 구체적으로 어떻게 하는건지 감이 잘 안오는데 조금 더 자세하게 설명해주실 수 있을까요? 그리고 제가 지금 popupVC를 performSegue() 방식으로 호출하고 popupVC에서 버튼을 누르면 기존 VC에 있는 함수를 호출해서 VC의 변수 값을 조절하려고 하는데 말씀하신 팝업에 delegate를 걸어서 내려가면 호출하게하면 초기화가 되지 않나 궁금하네요!!
아직 배우고 있는 중이라 모르는게 많네요…
답변 2
0
1. viewWillAppear가 호출되게 하는 방법
vc. modalPresentationStyle = fullscreen 뭐시기를 추가해줍니다.
그러면 잘될걸요.
그리고 님이 말씀하신 변수를 조절하는 방법은, delegate를 이용해야해요
B에서 receiveData 라는 프로토콜을 정의하고,
A에서 (func)receiveData를 구현 및 위임받아 할 일을 정해놉니다.
액션은, A에서 B를 연다. 열 때 데이터도 같이 넘겨준다.
ex) vc.name = "test2"
self.navigationcontroller pushview...vc
B에서 값을 선택 한 후, 값을 던져준다.
delegate.receiveData("test")
팝업을 종료하면 A에서 (func)receiveData 가 호출되면서 넘겨준 데이터가 날아온다.
0
안녕하세요.
요즘 개인적으로 요즘 좀 정신없어서 답변이 좀 늦었네요.
우선 인터넷에서는 swift delegate 이런 키워드로 검색하시면 예제는 많이 있는데 적당한 링크를 찾기가 어려워
간단히 코드를 구현했으니 참고 바랍니다.
코드는 2개의 클래스로 보시면 되고, 메인과 팝업 뷰컨트롤러 각각 어떻게 구현해야 하는지 보시면 됩니다.
// -- PopupViewController 파일에 구현할 내용
// 델리게이트 규격은 프로토콜 이라는 키워드를 이용해 만든다.
protocol PopupViewControllerDelegate {
func popupClosed()
}
class PopupViewController: UIViewController {
var delegate: PopupViewControllerDelegate?override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func popupDismiss(){
self.dismiss(animated: true) {
// 델리게이트 함수 호출을 아래처럼 입력하면 현재 팝업화면이 내려가고 아래 델리게이트 함수가 실행됨.
self.delegate?.popupClosed()
}
}
}
// -- UIViewController 파일에 구현할 내용
// 아래 PopupViewControllerDelegate 표기는 해당 델리게이트 규격을 사용하겠다는 선언
class ViewController: UIViewController, PopupViewControllerDelegate {
override func viewDidLoad() { super.viewDidLoad()
}
func popupClosed(){
// 이 함수는 팝업에서 규격이 만들어진 것으로 팝업에서 호출하면 여기서 위임받아서 호출하게 됨.
// 규격에 맞춰 잘 구현되어 있으면 팝업 내려가면서 현재 함수가 실행되어야 함.
}
func showPopup(){
let popupVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PopupViewController") as! PopupViewController
popupVC.modalPresentationStyle = .overCurrentContext
popupVC.delegate = self // 현재(나자신) 뷰컨트롤러에 팝업의 델리게이트 위임 연결을 함.
self.present(popupVC, animated: false, completion: nil)
}
}