添加到Xcode Interface Builder的MDCTextField无法接收用户输入
解决MDCTextField无法接收输入的问题
嘿,我之前在集成Material Components的文本框时也碰到过一模一样的问题!你的代码其实只差了关键一步,导致MDCTextField没法响应输入事件,我来帮你搞定:
核心问题
你已经正确初始化了MDCTextInputControllerOutlined,但没有把MDCTextField的delegate绑定到当前视图控制器,这会导致文本框无法触发编辑事件(比如唤起键盘、接收输入)。另外,使用MDC官方推荐的MDCTextInputDelegate会比UITextFieldDelegate更贴合组件的功能。
修正后的代码
import UIKit import MaterialComponents class ViewController: UIViewController, MDCTextInputDelegate { @IBOutlet weak var helloText: MDCTextField! var helloController: MDCTextInputControllerOutlined? override func viewDidLoad() { super.viewDidLoad() // 关键:给MDCTextField设置delegate helloText.delegate = self // 初始化输入控制器并关联文本框 helloController = MDCTextInputControllerOutlined(textInput: helloText) // 设置占位符,测试Material Design的上移效果 helloController?.placeholderText = "请输入内容" } // 可选:实现MDCTextInputDelegate的方法,处理编辑状态变化 func textInputDidBeginEditing(_ textInput: UITextInput) { print("开始编辑") } func textInputDidEndEditing(_ textInput: UITextInput) { print("结束编辑") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
额外检查项
- 再确认Storyboard中你的文本框类已经改成
MDCTextField,并且IBOutlet关联没有错误(右键点击视图控制器,检查helloText的连线是否正常) - 确保模拟器的键盘没有被禁用:按下
Cmd + K可以切换模拟器键盘的显示状态,有时候不小心关闭了键盘会误以为是文本框的问题 - 检查你的CocoaPods依赖是否是最新版本:可以运行
pod update MaterialComponents来更新组件,避免旧版本的已知bug - 再次确认文本框的
User Interaction Enabled选项处于勾选状态(虽然你说试过,但再检查一遍准没错)
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

