diff --git a/Documentation/UIKit.md b/Documentation/UIKit.md index 60a34a0..9bd9df7 100644 --- a/Documentation/UIKit.md +++ b/Documentation/UIKit.md @@ -436,7 +436,173 @@ making part of a label tappable. ## Navigation & Controllers - +
+UINavigationController — completion-handler push/pop, transparent bar + +### `func pushViewController(_:animated: Bool = true, completion: (() -> Void)? = nil)` +### `func popViewController(animated: Bool = true, _ completion: (() -> Void)? = nil)` +### `func popToViewController(_:animated: Bool = true, _ completion: (() -> Void)? = nil)` +The standard transitions with a completion block (wrapped in a `CATransaction`). + +```swift +navigationController?.pushViewController(detail) { + print("detail is on screen") +} +``` + +### `func pushViewController(_:hidesBottomBar: Bool = false, animated: Bool = true)` — *not tvOS* +Push while setting `hidesBottomBarWhenPushed`. + +### `func makeTransparent(withTint tint: UIColor = .white)` +Clear background + shadow, translucent, tinted bar/title. + +```swift +navigationController?.makeTransparent(withTint: .label) +``` + +
+ +
+UIViewController — state, instantiation, dismissal, toasts, keyboard, observers + +### `var isVisible: Bool` / `var isLoaded: Bool` +View is loaded **and** in a window. (`isLoaded` is an alias.) + +### `var isModal: Bool` +Whether the controller is presented modally (vs. pushed). + +### `static var className: String` / `static var identifier: String` / `static var segueID: String` +`"MyVC"`, `"idMyVC"`, `"idSegueMyVC"`. + +### `static func instantiate(storyBoard: String, identifier: String? = nil, bundle: Bundle? = …) -> T` +Load a controller from a storyboard by (default) `T.identifier`. + +```swift +let vc: ProfileVC = ProfileVC.instantiate(storyBoard: "Main") +``` + +### `static func instatiate(nibName: String, bundle: Bundle? = nil) -> T` *(sic — "instatiate")* +Load from a nib and force an initial layout pass. + +### `func present(viewControllerToPresent:completion: @escaping () -> Void)` +`present(_:animated:)` with a completion block. + +### `func closeController(jumpToController: UIViewController? = nil, completion: @escaping () -> Void)` +Dismiss if modal, else pop (to `jumpToController` if given), then call `completion`. + +```swift +closeController { self.refreshList() } +``` + +### `func show(toastWith message:, font: = system 12, toastPosition: ToastPosition, backgroundColor: = .black, textColor: = .white, duration: = 3)` +Show a temporary rounded toast label. `ToastPosition` is `.top` / `.down` +(notch-aware at the top). + +```swift +show(toastWith: "Saved", toastPosition: .down) +``` + +### `func addNotificationObserver(name:selector:)` / `func removeNotificationObserver(name:)` / `func removeNotificationsObserver()` +`NotificationCenter` registration shortcuts (last one removes all). + +### `@objc func dismissSystemKeyboard(_ sender: UITapGestureRecognizer)` +Ready-made selector for a tap-to-dismiss-keyboard gesture. + +```swift +view.addGestureRecognizer(UITapGestureRecognizer(target: self, + action: #selector(dismissSystemKeyboard(_:)))) +``` + +
+ +
+UITabBarController — badges, animated tab switching + +### `func setBadges(badgeValues: [Int], font: UIFont = Helvetica-Light 11)` +Set numeric badges for every tab at once (`0` = no badge). Custom-drawn +(`CustomTabBadge` label), so they position above each tab item. + +```swift +tabBarController?.setBadges(badgeValues: [0, 3, 0, 12]) +``` + +### `func addBadge(index:value:color:font:)` +Add a single custom badge. + +### `func setSelectedView(atIndex:withAnimation: Bool = false, completion:)` +Select a tab (pops that tab's nav stack to root first). + +### `func setSelectedView(withNoPop atIndex:withAnimation: Bool = false, completion:)` +Same, without popping to root. + +### `func animateToTab(toIndex: Int)` +Slide-transition between tabs. + +### `func changeViewControllerToItem(withViewController:Item:)` +Replace a tab's root controller then switch to that tab. + +```swift +tabBarController?.changeViewControllerToItem(withViewController: NewHome(), Item: 0) +``` + +### `class CustomTabBadge: UILabel` +The badge label type used above (`init(font:)`). + +
+ +
+UIApplication — environment, app info, open URL + +### `enum Environment` + `static var inferredEnvironment: Environment` +`.debug` / `.testFlight` / `.appStore`, inferred from build config, simulator, and +the provisioning/receipt files. + +```swift +if UIApplication.inferredEnvironment == .appStore { enableAnalytics() } +``` + +### `static var displayName: String?` / `static var buildNumber: String?` / `static var version: String?` +Bundle info values. (`LCEssentials.appVersion` etc. forward to these.) + +### `static func openURL(urlStr: String)` +Open a URL string if it can be opened. + +```swift +UIApplication.openURL(urlStr: "https://loverde.com.br") +``` + +
+ +
+UIResponder + +### `var getParentViewController: UIViewController?` +Walk the responder chain to the owning view controller. + +```swift +someView.getParentViewController?.present(alert, animated: true) +``` + +
+ +
+UIDevice — notch metrics, model name + +### `static var topNotch: CGFloat` / `static var bottomNotch: CGFloat` / `static var hasNotch: Bool` +Safe-area top/bottom insets and whether the device has a notch / Dynamic Island. + +```swift +let headerY: CGFloat = UIDevice.hasNotch ? 44 : 20 +``` + +### `var modelName: String` +Marketing name from the hardware identifier (`"iPhone 15 Pro"`, `"iPad Air (5th generation)"`, …); falls back to the raw identifier for unknown devices. Reads `SIMULATOR_MODEL_IDENTIFIER` on the simulator. + +```swift +UIDevice.current.modelName // "iPhone 16 Pro" +``` + +
## Collections & Tables