Swift 尝试呈现 UIAlertController,其视图不在窗口层次结构中(在 TWTRShareEmailViewController 之后呈现)

作者:编程家 分类: swift 时间:2025-11-06

在使用Swift进行开发时,我们经常会遇到需要呈现UIAlertController的情况。UIAlertController是iOS开发中常用的一种用于显示警告、提示、确认等消息的控制器。然而,有时候我们可能会遇到一个问题:当我们尝试在某个特定的视图控制器中呈现UIAlertController时,出现了一个奇怪的错误提示:“该视图不在窗口层次结构中”。今天,我们就来探讨一下这个问题的解决方法。

首先,让我们来看一个具体的案例。假设我们正在开发一个社交分享功能,并且在用户分享完成之后,需要显示一个确认对话框来提示用户分享成功。我们使用UIAlertController来实现这个功能,代码如下:

swift

func shareButtonTapped() {

// 执行社交分享操作...

let alertController = UIAlertController(title: "分享成功", message: "您已成功分享到社交平台", preferredStyle: .alert)

let confirmAction = UIAlertAction(title: "确定", style: .default, handler: nil)

alertController.addAction(confirmAction)

// 这里是关键,我们尝试在TWTRShareEmailViewController中呈现UIAlertController

let shareEmailVC = TWTRShareEmailViewController()

shareEmailVC.present(alertController, animated: true, completion: nil)

}

然而,当我们运行这段代码时,却发现控制台输出了一个错误信息:“该视图不在窗口层次结构中”。这是因为我们尝试在TWTRShareEmailViewController中呈现了UIAlertController,而TWTRShareEmailViewController并不在当前的窗口层次结构中。

那么,我们该如何解决这个问题呢?其实,解决方法非常简单。我们只需要将UIAlertController的呈现操作移动到当前窗口的根视图控制器上即可。修改代码如下:

swift

func shareButtonTapped() {

// 执行社交分享操作...

let alertController = UIAlertController(title: "分享成功", message: "您已成功分享到社交平台", preferredStyle: .alert)

let confirmAction = UIAlertAction(title: "确定", style: .default, handler: nil)

alertController.addAction(confirmAction)

// 将UIAlertController的呈现操作移动到当前窗口的根视图控制器上

if let rootViewController = UIApplication.shared.keyWindow?.rootViewController {

rootViewController.present(alertController, animated: true, completion: nil)

}

}

在修改后的代码中,我们通过UIApplication.shared.keyWindow?.rootViewController获取到当前窗口的根视图控制器,并将UIAlertController的呈现操作移动到根视图控制器上。这样一来,就不会再出现“该视图不在窗口层次结构中”的错误提示了。

解决UIAlertController视图不在窗口层次结构中的问题

在使用Swift进行iOS开发的过程中,我们经常会遇到需要呈现UIAlertController的情况。然而,有时候我们可能会遇到一个问题:当我们尝试在某个特定的视图控制器中呈现UIAlertController时,出现了一个奇怪的错误提示:“该视图不在窗口层次结构中”。这种情况通常发生在我们尝试在某个特定的视图控制器中呈现UIAlertController时,而该视图控制器并不在当前的窗口层次结构中。

以上就是解决UIAlertController视图不在窗口层次结构中的问题的方法。希望能对大家在开发过程中遇到类似问题时有所帮助。