Я создал дополнительное окно UIWindow, которое будет представлено поверх главного окна. Пользователь нажимает кнопку, и она переходит через главное окно. Пользователь может свернуть дополнительное окно, и оно будет находиться над панелью управления, как на картинке ниже. Они могут увеличить его, чтобы закрыть главное окно или отклонить его, и он будет уничтожен Работает нормально.
Я также создал настраиваемый лист действий, который запускается из нижней части экрана. Если дополнительное окно полностью покрывает главное окно, и лист действий запускается, он прекрасно запускается внутри дополнительного окна. Если дополнительного окна нет на экране, оно прекрасно запускается внутри главного окна.
Проблема в том, что если дополнительное окно свернуто на экране, и я хочу запустить лист действий из главного окна, лист действий вместо этого запускается внутри дополнительного окна, он не может различить два. Я открыл 3D визуализатор, и он показал, что главное окно было off
, а дополнительное окно было on
.
Как отличить оба окна при отображении таблицы пользовательских действий?
Кстати, если оба окна присутствуют и лист действий запускается из главного окна, я скрываю дополнительное окно. Я также посмотрел на другие ответы, и они сказали использовать UIApplication.shared.keyWindow.addSubview
, что я уже делаю.
Класс CustomActionSheet:
var collectionView: UICollectionView!
var deltaY: CGFloat!
let height: CGFloat = 200 // 4 cells x 50 pts each
func displayActionSheet(){
if let window = UIApplication.shared.keyWindow {
// collectionView initialized...
window.addSubview(collectionView)
deltaY = window.frame.height - height
collectionView.frame = CGRect(x: 0, y: window.frame.height, width: window.frame.width, height: height)
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [.curveEaseOut], animations: {
self.collectionView.frame = CGRect(x: 0, y: deltaY, width: self.collectionView.frame.width, height: self.collectionView.frame.height)
}
}
}
Класс MainView:
@IBAction func mainWindowActionSheetButton(_ sender: UIButton) {
let customActionSheet = CustomActionSheet()
customActionSheet.displayActionSheet()
}
Дополнительный класс Windows:
let myVC = MyController()
var nav: UINavigationController?
var window: UIWindow!
var maximized = true
override init() {
super.init()
window = UIWindow()
window.backgroundColor = .clear
window.windowLevel = UIWindowLevelStatusBar
nav = UINavigationController(rootViewController: myVC)
window.rootViewController = nav
window?.isHidden = false
window?.makeKeyAndVisible()
}
func maximizeOrMinimizeWindow() {
if maximized {
// show this full screen
} else {
// show this window minimized like in the picture
}
}
AnotherController Class, у которого есть кнопка, которая также запускает лист действий:
@IBAction func additionalWindowActionSheetButton(_ sender: UIButton) {
let customActionSheet = CustomActionSheet()
customActionSheet.displayActionSheet()
}