✅ 이 로직이 필요한 이유
UIViewController에는 isModal 같은 속성이 없어서,
push로 띄웠는지 / present로 띄웠는지 직접 판단해야 합니다.
var isModal: Bool {
if let navigationController = navigationController {
if navigationController.viewControllers.first != self {
return false
}
}
if presentingViewController != nil {
return true
}
if navigationController?.presentingViewController?.presentedViewController == navigationController {
return true
}
if tabBarController?.presentingViewController is UITabBarController {
return true
}
return false
}
✅ 각 조건 설명
if let navigationController = navigationController {
if navigationController.viewControllers.first != self {
return false
}
}
- 내가 navigation stack 안에 있는 VC인지 확인
- 내가 첫 번째가 아니라면 → push된 것 → 모달이 아님
if presentingViewController != nil {
return true
}
- 나를 띄운 VC가 있다면 → 모달로 띄워졌을 가능성 있음
- 이건 가장 일반적인 모달 판단 조건
if navigationController?.presentingViewController?.presentedViewController == navigationController {
return true
}
- 내가 navigationController에 감싸져 있는데,
- 그 navigationController 자체가 present된 것이면 → 모달
- 예: present(UINavigationController(rootViewController: self))
if tabBarController?.presentingViewController is UITabBarController {
return true
}
- 탭바 컨트롤러 전체가 present된 경우를 감지
- 예: present(MyTabBarController())
return false
- 그 외는 전부 false
'Project > HiddenGem' 카테고리의 다른 글
🤔 탭바는 가리지 않고, 커스텀 Bottom Sheet처럼 동작하는 UI를 원한다면? (0) | 2025.06.04 |
---|---|
🔨 Raw value for enum case must be a literal 문제 해결! (0) | 2025.06.03 |
🗺️ 지도 표시하기 (0) | 2025.06.02 |
🔨 데이터 타입 변환 및 통합하기 (0) | 2025.05.29 |
✅ UICollectionViewCell을 공용으로 사용하려면? (데이터 타입도 다를때) (0) | 2025.05.27 |