Swiftui 如何修复选择器导航只有在我长按链接时才起作用
我目前正在使用SwiftUI开发一个应用程序 当我在Swiftui 如何修复选择器导航只有在我长按链接时才起作用,swiftui,Swiftui,我目前正在使用SwiftUI开发一个应用程序 当我在NavigationView的Form中使用ontapsignature时,Picker内部的导航不起作用 但只有当我长按链接(如longpress手势)时,它才起作用 如果我不使用ontapsignate,Picker的导航功能正常,但在这种情况下,当我使用TextField选择numberPad作为键盘类型时,我无法关闭键盘 我怎样才能解决这个问题 下面是一个代码: OnTapGestureTest.swift import SwiftU
NavigationView
的Form
中使用ontapsignature
时,Picker
内部的导航不起作用
但只有当我长按链接(如longpress手势)时,它才起作用
如果我不使用ontapsignate
,Picker
的导航功能正常,但在这种情况下,当我使用TextField
选择numberPad
作为键盘类型时,我无法关闭键盘
我怎样才能解决这个问题
下面是一个代码:
OnTapGestureTest.swift
import SwiftUI
struct OnTapGestureTest: View{
@State var inputNo:String = ""
@State var selectNo:Int = 0
var body: some View {
NavigationView{
Form{
TextField("InputNo", text: $inputNo)
.keyboardType(.numberPad)
Picker(selection:$selectNo, label: Text("SelectNo")){
Text("0").tag(0)
Text("1").tag(1)
Text("2").tag(2)
Text("3").tag(3)
Text("4").tag(4)
Text("5").tag(5)
}
}
.onTapGesture {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
}
}
已更新
我试图通过引用来解决我的问题
*在iOS 13.0中,我只想在点击外部时关闭键盘(不处理拖动)
斯威夫特美术馆
...
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
...
let tapGesture = UITapGestureRecognizer(target: window, action:#selector(UIView.endEditing))
tapGesture.requiresExclusiveTouchType = false
tapGesture.cancelsTouchesInView = false
tapGesture.delegate = self
window?.addGestureRecognizer(tapGesture)
}
...
但它仍然不能很好地工作。。。我需要做更多的事情吗?误解了答案
Xcode:12.0.1版
iOS:13.0您可以在UIWindow
的帮助下全局添加点击手势:
extension UIApplication {
func addTapGestureRecognizer() {
guard let window = windows.first else { return }
let tapGesture = UITapGestureRecognizer(target: window, action: #selector(UIView.endEditing))
tapGesture.requiresExclusiveTouchType = false
tapGesture.cancelsTouchesInView = false
tapGesture.delegate = self
window.addGestureRecognizer(tapGesture)
}
}
extension UIApplication: UIGestureRecognizerDelegate {
public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
在你的主要内容中:(想法:一旦你的应用程序启动,这个点击手势就会添加到窗口中)
这尤其方便,因为您不必再注意将键盘隐藏在视图中,并且它不会阻塞任何控件
注
此代码来自
此外,我还看到了iOS13-对于非SwiftUI循环,这将是等效的:感谢您的帮助,我尝试通过引用此链接来执行一些解决方案https://stackoverflow.com/a/60010955/8700044
就像我更新的问题一样。我是否需要在我的结构中添加一些代码OnTapGestureTest.swift
?您是否从表单中删除了轻触手势?
?不,我没有在表单中更改任何内容。否则,您可以尝试使用我的解决方案进行SwiftUI循环。只需将onAppear
添加到SceneDelegate
中的初始视图中即可。应该是一样的。对我来说,它工作得很好。我删除了tapperstate
,然后它工作得很好,非常感谢您的支持!
@main
struct YourApp: App {
...
var body: some Scene {
WindowGroup {
//Your initial view
.onAppear(perform: UIApplication.shared.addTapGestureRecognizer)
}
}
}