Pra*_*y C 6 uitextview uisearchbar ios swift
我在使用以下方式呈现的视图中有一个 UISearchBar:
\nview.addSubview(searchView)\nsearchView.mySearchBar.becomeFirstResponder()\nRun Code Online (Sandbox Code Playgroud)\n如果我只是在搜索栏中输入文本而不触摸它,那么在大多数情况下这都可以正常工作。但是,如果我点击搜索栏(假设将光标放在另一个位置或复制/粘贴文本等),那么 Xcode 会打印以下警告:
\n[Assert] UITextEffectsWindow should not become key. Please file a bug to Keyboard | iOS with this call stack: (\n 0 UIKitCore 0x0000000190cd3e14 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 14769684\n 1 UIKitCore 0x0000000190a2e028 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 11993128\n 2 UIKitCore 0x0000000190c98ca8 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 14527656\n 3 UIKitCore 0x0000000190c77510 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 14390544\n 4 UIKitCore 0x0000000190c780c4 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 14393540\n 5 UIKitCore 0x00000001909e5d54 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 11697492\n 6 UIKitCore 0x00000001904d0f1c 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 6369052\n 7 UIKitCore 0x0000000190568a4c 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 6990412\n 8 UIKitCore 0x0000000190571fc0 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 7028672\n 9 UIKitCore 0x000000019056ec48 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 7015496\n 10 UIKitCore 0x000000019056e210 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 7012880\n 11 UIKitCore 0x00000001905627a0 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 6965152\n 12 UIKitCore 0x0000000190561b30 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 6961968\n 13 UIKitCore 0x0000000190a22534 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 11945268\n 14 UIKitCore 0x00000001909fd934 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 11794740\n 15 UIKitCore 0x0000000190a7fa20 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 12327456\n 16 UIKitCore 0x0000000190a841c0 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 12345792\n 17 UIKitCore 0x0000000190a7b480 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 12309632\n 18 CoreFoundation 0x000000018e120240 F80FCA31-BF76-3293-8BC6-1729588AE8B6 + 631360\n 19 CoreFoundation 0x000000018e120140 F80FCA31-BF76-3293-8BC6-1729588AE8B6 + 631104\n 20 CoreFoundation 0x000000018e11f488 F80FCA31-BF76-3293-8BC6-1729588AE8B6 + 627848\n 21 CoreFoundation 0x000000018e119a40 F80FCA31-BF76-3293-8BC6-1729588AE8B6 + 604736\n 22 CoreFoundation 0x000000018e119200 CFRunLoopRunSpecific + 572\n 23 GraphicsServices 0x00000001a4214598 GSEventRunModal + 160\n 24 UIKitCore 0x00000001909df004 00EA1426-38F7-3FD2-BE01-04EBD44ECA35 + 11669508\n 25 UIKitCore 0x00000001909e45d8 UIApplicationMain + 164\n 26 APPNAME 0x0000000100423468 main + 88\n 27 libdyld.dylib 0x000000018ddf8598 77E57314-8A58-3064-90C0-8AF9A4745430 + 5528\n)\nRun Code Online (Sandbox Code Playgroud)\n应用程序不会崩溃,但在此错误之后,如果我使用 Xcode 的调试器打印当前的 keyWindow,它会设置为UITextEffectsWindow(如错误警告所示)。
(lldb) po UIApplication.shared.keyWindow\n\xe2\x96\xbf Optional<UIWindow>\n - some : <UITextEffectsWindow: 0x135ede920; frame = (0 0; 375 667); opaque = NO; autoresize = W+H; layer = <UIWindowLayer: 0x2815009e0>>\nRun Code Online (Sandbox Code Playgroud)\n这会导致任何进一步的视图控制器演示使用UIApplication.shared.keyWindow?.rootViewController和self.present失败,因为 keyWindow 是UITextEffectsWindow而不是我的 AppDelegate\ 的窗口。
我真的不知道为什么会发生这种情况。我不会在应用程序中的任何地方摆弄 keywindow。
\n解决此问题的解决方案是我可以使用以下方法将 keywindow 设置回我的 AppDelegate\ 的窗口:
\n(UIApplication.shared.delegate as? AppDelegate)?.window?.makeKeyAndVisible()\nRun Code Online (Sandbox Code Playgroud)\n事情开始顺利进行。不过,我更希望有一个适当的解决方案,而不是这种解决方法。我觉得UITextEffectsWindow是 iOS 13 中引入的用于处理撤消和重做打字等手势的功能,但我可能是错的:
https://ios.gadgethacks.com/how-to/undo-redo-typing-with-ios-13s-new-gestures-0201481/
\n有办法防止这种情况吗?
\n如果没有,有没有办法禁用撤消/重做手势?
\n请注意,我认为这个应用程序是在 iOS 11 期间开发的,并且它没有 SceneDelegate 内容(除非 Xcode 在项目升级时以某种方式添加了它)。
\n编辑:我找到了以下方法来禁用 iOS 13 手势:
\n\nextension UITextField {\n @available(iOS 13.0, *)\n open override var editingInteractionConfiguration: UIEditingInteractionConfiguration {\n print("editingInteractionConfiguration!!!!!!!!!!!")\n return .none\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这确实打印了我的断点,但UITextEffectsWindow should not become key.警告仍然记录在控制台中。所以也许问题出在其他方面。
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |