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
- toyproject
- protocol
- Extentsion
- OSLog
- github
- UIAccessibility
- it
- Swift
- IOS
- ToDoRim
- Leetcode
- pubspec
- GIT
- xcode
- SwiftGen
- flutter
- swiftlint
- listview
- basic
- designPattern
- tip
- reetcode
- pubspec.yaml
- algorithm
- Equatable
- enumerations
- COMMIT
- keyWindow
- dart
- Widget
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