ios - 无法与添加到 Window 的 UIView 交互
问题描述
我正在使用这个objective-c代码向窗口添加一个视图:
// Main Storyboard
UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
// View controller with the view to add
UIViewController *vc = [mainStoryBoard instantiateViewControllerWithIdentifier:@"SomeViewController"];
// Find the topmost window
UIWindow *topWindow = [[[UIApplication sharedApplication].windows sortedArrayUsingComparator:^NSComparisonResult(UIWindow *win1, UIWindow *win2) {
return win1.windowLevel < win2.windowLevel || !win1.isOpaque;
}] lastObject];
// Add the view to the window
[topWindow addSubview:vc.view];
这很好用,我SomeViewController
用来离开视图的这个 Swift 方法也是如此:
// Get topmost window (Should be UIWindow)
let topWindow = UIApplication.shared.windows.sorted {
(win1, win2) in
return win1.windowLevel < win2.windowLevel || !win1.isOpaque
}.last
// Force view to prepare to disappear
self.viewWillDisappear(true)
// Send the view to the back
topWindow?.sendSubviewToBack(view)
这是我的objective-c代码运行后的视图结构。所选视图是添加的视图:
问题是新视图中的按钮都不起作用,因此我无法触发上述关闭方法。我已经尝试了使用情节提要添加的按钮和以编程方式添加的按钮。视觉上,按钮在点击时会做出反应,但它们不会触发任何东西。
解决方案
我最终通过完全更换根视图控制器而不是简单地将其视图添加为子视图来解决问题。问题在于@DonMag 指出我正在添加没有视图控制器的子视图。我发现了这个关于交换根视图控制器的问题,并将其作为我更改的基础。如果有人想提供一个不需要交换根视图控制器的完整解决方案,我会接受。
推荐阅读
- sql - 在 SQL Server 的并行调用中使用事务隔离的安全方法是什么?
- python - Plotly Trendline for Line Chart
- python - vimeo_dl:TypeError:预期的 str、bytes 或 os.PathLike 对象,而不是 ubuntu、mac 中的 HTTPError
- apache-spark - Spark Streaming 在 Python 中计算比率/百分比
- javascript - 不能在回调中调用 React Hook “useCourtClock”
- flutter - Flutter Null 安全迁移 - StreamBuilder 快照 - 无法通过索引访问长度或数据
- python - 从 Rust 问题中使用 python:dyld:惰性符号绑定失败:未找到符号:_Py_IsInitialized
- react-native - React Native 平滑进度条填满时间
- excel - 打开时如何只更改一个工作簿?
- python - Python Gevent - 猴子 patch_all - 它适用于已编译的 .so 模块吗?