forked from microsoft/fluentui-apple
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New SwiftUI
DemoHostingController
parent class (microsoft#2006)
- Loading branch information
1 parent
0e7c12e
commit b8a7cbb
Showing
5 changed files
with
87 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
ios/FluentUI.Demo/FluentUI.Demo/DemoHostingController.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
// | ||
|
||
import SwiftUI | ||
import FluentUI | ||
|
||
/// A specialized subclass of `FluentThemedHostingController` that can be used for SwiftUI demo screens. | ||
class DemoHostingController: FluentThemedHostingController { | ||
init(rootView: AnyView, title: String, readmeText: String? = nil) { | ||
super.init(rootView: rootView) | ||
self.title = title | ||
} | ||
|
||
@objc required dynamic init?(coder aDecoder: NSCoder) { | ||
preconditionFailure("init(coder:) has not been implemented") | ||
} | ||
|
||
@MainActor required dynamic init(rootView: AnyView) { | ||
super.init(rootView: rootView) | ||
} | ||
|
||
override func viewDidLoad() { | ||
super.viewDidLoad() | ||
configureAppearanceAndReadmePopovers() | ||
} | ||
|
||
// MARK: - Demo Appearance Popover | ||
|
||
func configureAppearanceAndReadmePopovers() { | ||
let settingsButton = UIBarButtonItem(image: UIImage(named: "ic_fluent_settings_24_regular"), | ||
style: .plain, | ||
target: self, | ||
action: #selector(showAppearancePopover(_:))) | ||
let readmeButton = UIBarButtonItem(image: UIImage(systemName: "info.circle.fill"), | ||
style: .plain, | ||
target: self, | ||
action: #selector(showReadmePopover(_:))) | ||
navigationItem.rightBarButtonItems = [readmeButton, settingsButton] | ||
} | ||
|
||
@objc func showReadmePopover(_ sender: UIBarButtonItem) { | ||
readmeViewController.popoverPresentationController?.barButtonItem = sender | ||
readmeViewController.popoverPresentationController?.delegate = self | ||
self.present(readmeViewController, animated: true, completion: nil) | ||
} | ||
|
||
@objc func showAppearancePopover(_ sender: AnyObject, presenter: UIViewController) { | ||
if let barButtonItem = sender as? UIBarButtonItem { | ||
appearanceController.popoverPresentationController?.barButtonItem = barButtonItem | ||
} else if let sourceView = sender as? UIView { | ||
appearanceController.popoverPresentationController?.sourceView = sourceView | ||
appearanceController.popoverPresentationController?.sourceRect = sourceView.bounds | ||
} | ||
appearanceController.popoverPresentationController?.delegate = self | ||
presenter.present(appearanceController, animated: true, completion: nil) | ||
} | ||
|
||
@objc func showAppearancePopover(_ sender: AnyObject) { | ||
showAppearancePopover(sender, presenter: self) | ||
} | ||
|
||
private var readmeText: String? | ||
|
||
private lazy var appearanceController: DemoAppearanceController = .init(delegate: self as? DemoAppearanceDelegate) | ||
private lazy var readmeViewController: ReadmeViewController = .init(readmeString: readmeText) | ||
} | ||
|
||
extension DemoHostingController: UIPopoverPresentationControllerDelegate { | ||
/// Overridden to allow for popover-style modal presentation on compact (e.g. iPhone) devices. | ||
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { | ||
return .none | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters