표시된 뷰 컨트롤러의 대화형 삭제 사용 안 함
iOS 13은 새로운 디자인의modalPresentationStyle .pageSheet(그리고 그 형제자매).formSheet모듈러로 표시되는 뷰 컨트롤러의 경우...
...또한 표시된 뷰 컨트롤러를 아래로 슬라이드하여 이러한 시트를 제거할 수 있습니다(순차적 삭제).새로운 "풀 투 디스미스" 기능은 매우 유용하지만 항상 바람직한 것은 아닙니다.
질문: 어떻게 하면 인터랙티브한 해고를 끌 수 있을까요?- 프레젠테이션 스타일은 그대로 유지한다는 점을 명심하십시오.
옵션 1:
viewController.isModalInPresentation = true
(디세이블 인터랙티브).pageSheet해고는 이렇게 행동합니다.)
- iOS 13 이후로
UIViewController라고 하는 새로운 속성이 포함되어 있습니다.isModalInPresentation로 설정해야 합니다.true인터랙티브 해고를 막기 위해서입니다. - 기본적으로 뷰 컨트롤러의 범위를 벗어나는 이벤트는 무시됩니다.자동 스타일뿐만 아니라 다음과 같은 프레젠테이션 스타일도 사용할 경우 유의하십시오.
.popover기타. - 이 속성은
false디폴트입니다.
공식 문서:한다면
true, UIKit 는 뷰 컨트롤러의 범위를 벗어나는 이벤트를 무시하고 뷰 컨트롤러가 화면상에 있는 동안 대화식으로 해제되는 것을 방지합니다.
옵션 2:
func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
return false
}
- iOS 13 이후로
UIAdaptivePresentationControllerDelegate라고 하는 새로운 메서드가 포함되어 있습니다.presentationControllerShouldDismiss. - 이 메서드는 표시된 뷰 컨트롤러가 프로그래밍 방식으로 해제되지 않고 해당 컨트롤러가 해제된 경우에만 호출된 경우에만 호출됩니다.
isModalInPresentation속성이 로 설정됩니다.false.
힌트: 할당하는 것을 잊지 마세요.
presentationController의 대표자하지만 주의하세요, 심지어 이 컴퓨터에 접속하는 것만으로presentationController메모리 누설이 발생할 수 있습니다.
이전 iOS 버전(< iOS13)과 동일한 동작을 하고 싶은 경우, 모델 프레젠테이션을 풀스크린으로 설정하기만 하면 됩니다.
UIModalPresentationStyle.fullScreenlet someViewController = \*VIEW CONTROLLER*\ someViewController.modalPresentationStyle = .fullScreen스토리보드를 사용하고 있다면 segua를 선택하고
Full Screen을 형성하다Presentation드롭 다운인터랙티브 해고를 무효로 하고, 새로운 프레젠테이션 스타일을 설정해 두는 경우
UIViewController소유물isModalInPresentation로.true.if #available(iOS 13.0, *) { someViewController.isModalInPresentation = true // available in IOS13 }
속성isModalInPresentation도움이 될 거야
매뉴얼에서 다음 항목을 참조하십시오.
로 설정하면
true, UIKit 는 뷰 컨트롤러의 범위를 벗어나는 이벤트를 무시하고 뷰 컨트롤러가 화면상에 있는 동안 대화식으로 해제되는 것을 방지합니다.
다음과 같이 사용할 수 있습니다.
let controller = MyViewController()
controller.isModalInPresentation = true
self.present(controller, animated: true, completion: nil)
비즈니스 로직이 있는 경우 모든 필드에 값을 입력한 후 해제해야 합니다.
온에 ViewDidLoadView Controller:
func viewDidLoad() {
self.navigationController?.presentationController?.delegate = self
}
그렇지 않은 경우 단순히
func viewDidLoad() {
self.presentationController?.delegate = self
}
그런 다음 위임 방법을 구현합니다.
extension ViewController: UIAdaptivePresentationControllerDelegate {
func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
guard let text = firstName.text, text.isEmpty else { return false }
guard let text = lastName.text, text.isEmpty else { return false }
...
return true
}
}
스토리보드를 사용하여 UI를 레이아웃하는 경우 네비게이션 컨트롤러를 사용할 때 이 인터랙티브 해제를 비활성화하는 가장 좋은 방법은 속성 검사기의 네비게이션 컨트롤러 표시를 자동에서 전체 화면으로 변경하는 것입니다.그러면 네비게이션 스택의 모든 뷰 컨트롤러가 전체 화면이 되고 사용자가 해제할 수 없습니다.
탐색 컨트롤러에 대한 프레젠테이션 옵션을 보여주는 속성 검사기
Apple은 이 링크에서 샘플 코드를 공유했습니다.
it it를 한다.isModalInPresentation많은 사용자가 제안할 수 있습니다.
모든 솔루션이 좋지만 내 경우 움직임을 멈출 수 있는 옵션이 필요합니다.이게 그 코드입니다.
이동을 차단하려면:
self.yourViewController?.presentedView?.gestureRecognizers?[0].isEnabled = false
이동 차단을 해제하려면:
self.yourViewController?.presentedView?.gestureRecognizers?[0].isEnabled = true
언급URL : https://stackoverflow.com/questions/56459329/disable-the-interactive-dismissal-of-presented-view-controller
'programing' 카테고리의 다른 글
| Bash에서 디렉토리의 부모 가져오기 (0) | 2023.04.20 |
|---|---|
| 이미지 저장 - SQL DB vs Azure Blob 스토리지 (0) | 2023.04.20 |
| Azure AD의 "Request API permissions"에서 "Application permissions"가 비활성화되어 있는 이유는 무엇입니까? (0) | 2023.04.20 |
| {x: Null} 대투명? (0) | 2023.04.20 |
| WPF 및 를 사용하여 CTRL+SHIFT+(LETTER)라고 하는 글로벌 단축키를 등록하려면 어떻게 해야 합니까?NET 3.5? (0) | 2023.04.20 |


