250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- algorithm
- tip
- UIAccessibility
- IOS
- pubspec
- OSLog
- SwiftGen
- basic
- designPattern
- github
- xcode
- COMMIT
- Widget
- protocol
- it
- toyproject
- Extentsion
- swiftlint
- reetcode
- dart
- Swift
- listview
- ToDoRim
- pubspec.yaml
- flutter
- enumerations
- keyWindow
- Equatable
- GIT
- Leetcode
Archives
- Today
- Total
수니의 개발새발
[iOS/Swift] 최상위에 있는 뷰컨트롤러 얻기 본문
728x90
반응형
개발하면서 앱의 최상위 뷰 컨트롤러를 찾아야 할 일이 종종 있어요.
처음에는 최상위 뷰에 얼럿을 띄우기 위해 작업을 했지만, 한번 extension으로 빼놓으니 1) 웹뷰 통신(브릿지 호출)으로 뷰 이동 2) 푸시나 스키마를 통해 딥링크가 들어올 때, 가동 중인 앱의 뷰 이동 등 여러 곳에서 사용할 수 있게 됐어요.
📌 이번 글은
현재 앱에서 최상위 뷰 컨트롤러를 반환하는 UIWindow Extension 소스입니다.
UIWindow+Ext.swift
import UIKit
extension UIWindow {
public var visibleViewController: UIViewController? {
return self.visibleViewControllerFrom(vc: self.rootViewController)
}
/**
# visibleViewControllerFrom
- Author: suni
- Date:
- Parameters:
- vc: rootViewController 혹은 UITapViewController
- Returns: UIViewController?
- Note: vc내에서 가장 최상위에 있는 뷰컨트롤러 반환
*/
public func visibleViewControllerFrom(vc: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nc = vc as? UINavigationController {
return self.visibleViewControllerFrom(vc: nc.visibleViewController)
} else if let tc = vc as? UITabBarController {
return self.visibleViewControllerFrom(vc: tc.selectedViewController)
} else {
if let pvc = vc?.presentedViewController {
return self.visibleViewControllerFrom(vc: pvc)
} else {
return vc
}
}
}
}
👩🏻💻 사용 예제
if let vc = UIApplication.shared.keyWindow?.visibleViewController as? UIViewController {
let alert = UIAlertController(title: "타이틀", message: "메시지", preferredStyle:UIAlertController.Style.alert)
let action1 = UIAlertAction(title:completeTitle, style: .default) { action in
completeHandler?()
}
alert.addAction(action1)
vc.present(alert, animated: true, completion: nil)
}
최상위 뷰에 얼럿을 띄우는 예제입니다.
🙋🏻♀️ 참고
728x90
반응형
'iOS - Swift' 카테고리의 다른 글
[iOS/Swift] iOS13 에서 라이트모드(또는 다크모드)만 지원하기 (turn off darkmode) (0) | 2021.12.29 |
---|---|
[iOS/Swift] Custom Animation Popup 만들기 (with. Storyboard) (0) | 2021.12.29 |
[iOS/Swift] UIAlertController를 사용하여 Alert 만들기 (0) | 2021.12.29 |
[iOS/Swift] xib로 TableView 만들기 (TableViewCell Select Highlight) (0) | 2021.12.28 |
[iOS/Swift] Grid형태 Image CollectionView만들기 (0) | 2021.12.24 |
Comments