gpt4 book ai didi

ios - 在显示键盘后离开应用程序时出现快照错误(需要 afterScreenUpdates :YES)

转载 作者:行者123 更新时间:2023-11-28 13:34:10 24 4
gpt4 key购买 nike

我目前正在启动一个新的测试项目,用于通过单独的(模态) View 导入客户端证书。该应用程序始终以 View “主视图”(Main View)开头,其中我有一些虚拟元素来测试连接是否有效。一旦用户将文件添加到我的应用程序(例如,在邮件中打开它或在模拟器中拖放),“证书导入” View 将通过 Segue 显示。当用户点击“输入证书密码”文本字段时,键盘会弹出。返回时,如果输入的密码对于导入的 p12 客户端证书是正确的,则调用 .resignFirstResponder() 并通过标签应用程序。我希望我的“证书导入” View ( Certificate Import View ) 在应用程序关闭或多任务处理被激活时被关闭。我通过在 CertificateImportViewController 上的应用程序委托(delegate)的 applicationWillResignActive(application:) 方法中调用 dismiss(animated:completion:) 来实现这一点。

现在,当我关闭我的应用程序或仅在“证书导入 View ”中显示键盘后切换到多任务处理时,我的问题就出现了。

当我在以下状态下关闭/执行多任务应用程序时,我会在调试器控制台中获得相应的条目:

  1. 当显示键盘并且我在证书导入 View 中时:[快照] 对不在可见窗口中的 View (0x7fa91506b200, UIKeyboardImpl) 进行快照需要 afterScreenUpdates:YES。

  2. 即使我离开证书导入 View 并回到“主视图”:[快照] 对不在可见窗口中的 View (0x7fa91506b200, UIKeyboardImpl) 进行快照需要 afterScreenUpdates:YES。

  3. 在证书导入 View 中显示键盘后,离开应用程序,再次打开应用程序,然后关闭/多任务处理应用程序:[快照] 快照 View (0x7f99e3821600,UIKeyboardImpl)尚未至少被渲染一次需要 afterScreenUpdates:YES。

我试图找出是什么让操作系统认为它必须拍摄包括键盘在内的快照,即使主视图从不显示键盘。我还试图找出为什么键盘认为它必须在键盘被关闭后对键盘进行快照 (resignFirstResponder())。我不确定如何调试将我的证书导入 View 保存在堆栈上的内容(我认为这可能是一个原因)。

AppDelegate.swift

func applicationWillResignActive(_ application: UIApplication) {

guard let rv = window?.rootViewController as? UINavigationController else {
print("No Navigation Controller")
return
}

if let r = rv.presentedViewController as? UINavigationController, let c = r.topViewController as? CertificateImportViewController {
c.dismiss(animated: true, completion: nil)
}
}


func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

self.fileBlobURL = url

guard let rv = window?.rootViewController as? UINavigationController else {
print("No Navigation Controller")
return false
}

guard let myEntryViewController = rv.topViewController, myEntryViewController.title == "MainView" else {
print("Wrong View Controller")
return false
}

myEntryViewController.performSegue(withIdentifier: "ShowCertificateImport", sender: myEntryViewController)

return true
}

CertificateImportViewController.swift

class CertificateImportViewController: UIViewController {

var fileURL: URL?
var credential: URLCredential?

@IBOutlet weak var certpwTextField: UITextField!
@IBOutlet weak var certResult: UILabel!
@IBOutlet weak var saveButton: UIBarButtonItem!

override func viewDidLoad() {
super.viewDidLoad()

certpwTextField.delegate = self

let appdelegate = UIApplication.shared.delegate as! AppDelegate
guard let u = appdelegate.fileBlobURL else {
print("No file blob path found!")
return
}

self.fileURL = u
}

@IBAction func cancel(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
certpwTextField.resignFirstResponder()
certpwTextField.delegate = nil

}
}

最佳答案

经过更多的研究,包括大量的试验和错误,我意识到:

但是,如果将来有人找到解决此问题的解决方案,出于好奇,我会对它是如何完成的非常感兴趣。

关于ios - 在显示键盘后离开应用程序时出现快照错误(需要 afterScreenUpdates :YES),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56898912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com