2017-11-15 3 views
0

parentViewController에서 푸시 된 childViewController가 있습니다. childViewController에서 특정 조건에서 팝업 액션을 차단하고 싶습니다.UIViewController가 튀어 나오지 않게하는 방법은 무엇입니까?

이 코드를 viewWillDisappear에 썼습니다.하지만 다른 곳에서는이 코드를 사용해야합니다. 변경까지

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 

    if changesMade { 
     let alertController = UIAlertController(title: "Alert", message: "Changes made are not saved. Do you wish to save changes made?", preferredStyle: .alert) 

     let cancelOption = UIAlertAction(title: "Cancel", style: .cancel) 
     let saveOption = UIAlertAction(title: "Save", style: .default, handler: { (action) in 
      self.saveSession() 
     }) 

     alertController.addAction(saveOption) 
     alertController.addAction(cancelOption) 
     present(alertController, animated: true) 
    } 
} 
+0

코드보기에서 super.viewWillDisappear (animated)를 시도해보십시오.보기가 불규칙 해지면 모든 값이 deinit으로 이동하기 때문입니다. 내 추측에 따라 –

+0

왜보기 컨트롤러를 팝업하려고하기 전에 변경되었는지 확인하지 마십시오. '즉시, 팝 동작을 차단 버튼을 다시 숨기거나 그렇게 사용자가 작업을 수행 할 수 wan't 비활성화 할 때 알고있는 경우 changesMade { showAlert() } 다른 { dismissVC() 가}' –

+0

이 완 경우 '팝. –

답변

0

이 두 있습니다 - 팝 행동이 우리가 탐색 컨트롤러에서 얻을 버튼을 기본을 다시 사용하여 경고에서 컨트롤러되고있는 당신의 상태가 Github에서 링크에 만족하지 때까지

당신은 당신이 수행하거나하지 않도록 조치를 팝업 사용자 정의 할 수 있습니다 여기의 사례 :

  1. 사용자 뒤로 버튼을 사용하여 팝업 할 수 있습니다.
  2. 사용자는 내비게이션 컨트롤러의 대화식 팝 제스처를 사용하여 팝 할 수 있습니다.

난 당신이 버튼 이름을 완료을 사용자 정의를 다시 사용이 버튼을 눌러에 경고를 보여주는 당신의 로직을 작성한다고 생각합니다. 맞춤형 뒤로 버튼을 사용하면 대화 형 팝업 제스처가 기본적으로 사용 중지되며 내비게이션 컨트롤러에서 interactivePopGesture를 사용/사용 중지하는 댄스를하지 않아도됩니다.

+0

이것이 좋은 방법이라고 생각합니다. 하지만 한 가지 더 꼬임이 있습니다. Navigation Navbar를 사용하지 않고 있습니다. 나는 내 자신의 사용자 정의 navbar있다. 그럼 어떻게해야합니까? – kbokdia

+0

사용자 지정 NavigationBar (UINavigationBar의 하위 클래스)를 만든 경우 아무 것도 변경하지 않는다고 생각합니다. UINavigationBar 클래스에는 사용자 지정 완료 단추로 변경해야하는 뒤로 단추 항목이 있습니다. –

+0

내 사용자 정의 navbar는 UIView의 서브 클래스입니다 – kbokdia

0

블록 팝 액션이

if changesMade { 
     let alertController = UIAlertController(title: "Alert", message: "Changes made are not saved. Do you wish to save changes made?", preferredStyle: .alert) 

     let cancelOption = UIAlertAction(title: "Cancel", style: .cancel) 
     let saveOption = UIAlertAction(title: "Save", style: .default, handler: { (action) in 
      self.saveSession() 
      self.navigationController?.popViewController(animated: true) 
     }) 

     alertController.addAction(saveOption) 
     alertController.addAction(cancelOption) 
     present(alertController, animated: true) 
    } 

업데이트와 같은 저장되지 않습니다 - 사용자 정의 버튼 등 부모보기 컨트롤러 에서 추진되고있는 자식보기 컨트롤러의 행동 이하이 추가 조건을 만족시키지 않고 사용자가 자식에서 부모로 다시 이동할 수 없음

내비게이션 backButton의 동작을 사용자 정의하려면 아래 라인을 사용하여 뒤로 버튼을 수동으로 추가해야합니다. 여기에 추가되는 barButton을 사용자 정의 할 수 있습니다 DidLoad에

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.backToInitial(sender:))) 

이 필요한 작업

@objc func backToInitial(sender: AnyObject) { 
     if changesMade { 
      let alertController = UIAlertController(title: "Alert", message: "Changes made are not saved. Do you wish to save changes made?", preferredStyle: .alert) 

      let cancelOption = UIAlertAction(title: "Cancel", style: .cancel) 
      let saveOption = UIAlertAction(title: "Save", style: .default, handler: { (action) in 
       self.saveSession() 
       self.navigationController?.popViewController(animated: true) 
      }) 

      alertController.addAction(saveOption) 
      alertController.addAction(cancelOption) 
      present(alertController, animated: true) 
     } 
    } 

을 수행하고이 그것을

을 수행 할 수있는 방법을 설계대로 난 당신이 탐색 컨트롤러의 버튼 액션 작업을 다시 기본값으로 중지 할 수 있습니다 생각하지 않는다 하지만 예 ViewWillDisappear에서 관리 할 수 ​​있습니다.

override func viewWillDisappear(_ animated: Bool) { 
     if self.isMovingFromParentViewController || self.isBeingDismissed { 
      self.navigationController?.popViewController(animated: false) //here task but will not result as Expected output 
     } 
    } 

------ ----------- Re-Update ---------------

신속 함 예상대로 출력하기 위해 objective-C 클래스를 사용했습니다. childViewController https://github.com/RockinGarg/NavigationBackButton.git

+0

팝 동작을 어떻게 차단합니까? 팝 동작은 뒤로 단추를 클릭하거나 제스처를 통해 두 가지 방법으로 트리거됩니다. – kbokdia

+0

당신은 기본적으로 당신이 거기에서 수표를 원한다고 오는 네비게이션 컨트롤러의 뒤로 버튼에 대해 말하고 있습니까? 제스처 동작에서 값이 저장되지 않을 때까지 내 응답 코드를 직접 작성할 수 있습니다. 팝업은 수행되지 않습니다. –

+0

내 대답이 업데이트되었습니다. Pease check가 도움이되기를 바랍니다. 여기에 사용자 지정 뒤로 단추를 사용하여 코드를 작성한 팝업 동작을 차단해야합니다. –

관련 문제