首页 > 解决方案 > 无法与添加到 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代码运行后的视图结构。所选视图是添加的视图:

视图层次结构的屏幕截图

问题是新视图中的按钮都不起作用,因此我无法触发上述关闭方法。我已经尝试了使用情节提要添加的按钮和以编程方式添加的按钮。视觉上,按钮在点击时会做出反应,但它们不会触发任何东西。

标签: iosobjective-cswiftuibuttontouch-up-inside

解决方案


我最终通过完全更换根视图控制器而不是简单地将其视图添加为子视图来解决问题。问题在于@DonMag 指出我正在添加没有视图控制器的子视图。我发现了这个关于交换根视图控制器的问题,并将其作为我更改的基础。如果有人想提供一个不需要交换根视图控制器的完整解决方案,我会接受。


推荐阅读