[ios] Swift에서 ViewController를 해제하는 방법?

호출하여 ViewController를 신속하게 해제하려고합니다 dismissViewController.IBAction

  @IBAction func cancel(sender: AnyObject) {
    self.dismissViewControllerAnimated(false, completion: nil)
    println("cancel")
}

@IBAction func done(sender: AnyObject) {
    self.dismissViewControllerAnimated(false, completion: nil)
    println("done")
}

segue의 무작위 이미지

콘솔 출력에서 ​​println 메시지를 볼 수 있지만 ViewController는 결코 닫히지 않습니다. 무엇이 문제 일 수 있습니까?



답변

당신이 이미지에서 푸시를 사용하여 ViewController를 제시 한 것처럼 보입니다.

dismissViewControllerAnimated모달을 사용하여 발표 가까운 ViewControllers에 사용된다

스위프트 2

navigationController.popViewControllerAnimated(true)

스위프트 4

navigationController?.popViewController(animated: true)

dismiss(animated: true, completion: nil)


답변

귀하의 문제에 대한 해결책이 있습니다. 모달을 사용하여 뷰를 표시하는 경우이 코드를 사용하여 뷰 컨트롤러를 닫으십시오.

스위프트 3 :

self.dismiss(animated: true, completion: nil)

또는

“push”segue를 사용하여보기를 제시하면

self.navigationController?.popViewController(animated: true)


답변

이 작업을 수행하면 콘솔에 println 메시지가 표시되지 않을 수 있습니다.

@IBAction func cancel(sender: AnyObject) {
  if(self.presentingViewController){
    self.dismissViewControllerAnimated(false, completion: nil)
    println("cancel")
   }
}

@IBAction func done(sender: AnyObject) {
  if(self.presentingViewController){
    self.dismissViewControllerAnimated(false, completion: nil)
    println("done")
  }
}


답변

Swift 3.0 ~ 4.0에서는 이것을 함수에 입력하는 것만 큼 쉽습니다.

self.dismiss(animated: true, completion: nil)

또는 내비게이션 컨트롤러에있는 경우 “팝”할 수 있습니다.

self.navigationController?.popViewController(animated: true)


답변

  1. 해제하려는보기를 NavigationController에 포함
  2. “완료”를 식별자로 사용하여 BarButton 추가
  3. 완료 버튼이 선택된 상태에서 어시스턴트 편집기를 호출하십시오.
  4. 이 버튼에 대한 IBAction을 만듭니다.
  5. 이 줄을 괄호 안에 추가하십시오 :

    self.dismissViewControllerAnimated(true, completion: nil)

답변

사용하다:

self.dismiss(animated: true, completion: nil)

대신에:

self.navigationController.dismissViewControllerAnimated(true, completion: nil)


답변

내비게이션 컨트롤러없이 컨트롤러를 제시하는 경우 제시된 컨트롤러의 메소드에서 다음 코드를 호출 할 수 있습니다.

self.presentingViewController?.dismiss(animated: true, completion: nil)

ViewController가 모달로 표시되면 선택적 presentingViewController가 nil이 아니고 코드가 실행됩니다.