SwiftUI 隐藏键盘输入法

SwiftUI中隐藏键盘的方法
这篇博客介绍了在SwiftUI中如何使用UIKit扩展来实现隐藏键盘的功能。通过在View中添加一个自定义的hideKeyboard方法,调用UIApplication.shared.sendAction来发送一个消息,使当前第一响应者失去焦点,从而达到隐藏键盘的目的。

由于Swiftui原生未提供该修饰符

需要用到Uikit的代码:然后在任意View里面就可以调用hideKeyBoard了。

 

#if canImport(UIKit)
extension View {
    func hideKeyboard() {
        UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
    }
}
#endif

 

不同系统和场景下关闭隐藏键盘的方法有所不同,以下是一些常见的方法: - **鸿蒙HarmonyOS系统**:在HarmonyOS应用开发中,可使用官方提供的API来关闭隐藏输入法键盘,不过引用中未给出具体API使用代码 [^2]。 - **Android系统**: - **通用方法**:可以通过调用以下方法来控制键盘的显示与隐藏 [^3]。 ```java //显示软键盘 public static void showKeyboard(final View view) { if (view == null) return; view.requestFocus(); InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(view, 0); } //隐藏键盘 public static void hideKeyboard(final View view) { if (view == null) return; InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } //根据当前键盘状态切换,显示就隐藏隐藏就显示 public static void toggleKeyboard(Context context) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, 0); } ``` - **页面触摸隐藏**:设置触摸事件监听器,当用户点击页面任何地方时,通过`hideKeyboard()`方法隐藏键盘,该方法利用`InputMethodManager`关闭键盘 [^1]。 - **Dialog场景**:在Android Dialog中,软键盘隐藏可以在`dismiss`之后隐藏,或者在回调方法`onDismiss`中隐藏;显示软键盘可在`setOnShowListener`方法里,在`OnShowListener`接口的回调方法`onShow`中进行 [^4]。 - **SwiftUI界面**:在SwiftUI界面的TextField中可使用以下方法隐藏键盘,如在Form下隐藏键盘 [^5]。 ```swift import SwiftUI struct DismissingKeyboard: ViewModifier { func body(content: Content) -> some View { content .onTapGesture { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, for:nil) } } } struct DissTextFieldView: View { @State var name = "" var body: some View { Form{ TextField("请输入",text:$name) .frame(width:300) .textFieldStyle(RoundedBorderTextFieldStyle()) }.modifier(DismissingKeyboard()) } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值