2017-12-24 6 views
0

는 I 번째 뷰 컨트롤러보기 컨트롤러와 TableViewController간에 데이터를 전달할 때 신속한 4에서 performSegue로 열린 페이지를 닫을 때?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let vc = segue.destination as? secondViewController { 
     vc.showPageType = self.checkEdit 
    } 

먼저 뷰 컨트롤러로부터 데이터를 전달하기 위해 여기에서이 코드를 사용하지만, 문제는 두 번째보기 제어기 I 텍스트 필드가 있다는 것을 사용자는 텍스트 필드를 채우고을 누르면 버튼을 secondViewController이 방법

dismiss(animated: false, completion: nil) 

으로 기각 될 것입니다 제출 지금은 내가 swift4에서 그렇게 할 수있는 방법을 첫 번째 뷰 컨트롤러에 텍스트 필드의 텍스트를 전달하는 SEGUE의 방법을 수행 사용할 수 없습니다?

+1

대리자를 사용하여 B-> A에서 데이터를 전달합니다. –

+1

가능한 [ViewController를 닫을 때 다른 컨트롤러에 데이터를 전달하는 방법]의 복제본이 있습니까? (https://stackoverflow.com/questions/43706662/how-to-pass-data-to-another-controller-on-dismiss-viewcontroller) –

+0

거기에 문제가 내 firstviewcontroller tableviewcontroller보기 컨트롤러가 없습니다 –

답변

0

당신의 secondViewController 소스 코드 파일에 추가

protocol SecondViewControllerDelegate { 

    func submitButtonPushedWithText(_ text: String) 
} 

이 클래스 secondViewController 속성에 추가

var delegate: SecondViewControllerDelegate? 

를 그런 방법 submitButtonPushedWithText을 SecondViewControllerDelegate에 첫 번째 컨트롤러를 준수하고 구현 (:) :

class FirstViewController: UIViewController, SecondViewControllerDelegate { 

    func submitButtonPushedWithText(_ text: String) { 
     // use text from textField of second controller 
    } 
} 

또한 설치 대리인 발표하기 전에 두 번째 컨트롤러의 perty :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if let vc = segue.destination as? secondViewController { 
    vc.showPageType = self.checkEdit 
    // setup delegate 
    vc.delegate = self 
} 

지금 당신이 호출 할 수있는 방법 submitButtonPushedWithText (_ 텍스트 : 문자열) 세컨드 컨트롤러에서 바로 기각 호출하기 전에 (애니메이션 : 거짓, 완료 : 무기 호) :

func submitButtonPushed() { 
    delegate?.submitButtonPushedWithText(textField.text!) 
    dismiss(animated: false, completion: nil) 
} 
관련 문제