Swift:MaterialComponents TextFields快速单击时出现意外的占位符行为

Posted

技术标签:

【中文标题】Swift:MaterialComponents TextFields快速单击时出现意外的占位符行为【英文标题】:Swift: MaterialComponents TextFields Unexpected Placeholder Behavior when clicking fast 【发布时间】:2019-03-06 04:10:24 【问题描述】:

我已经在MaterialComponents on Github 提出了这个问题,但似乎还没有答案。 问题是当我单击要激活的文本字段然后单击外部时,它工作正常,但是当我重复这样做时,文本字段的占位符将始终位于顶部

这是一个图像的问题

当文本字段确实加载时:

当文本字段处于活动状态时:

当我们重复单击文本字段然后再次单击外部时,它将如下所示

代码如下:

@IBOutlet weak var textfieldFloating: MDCTextField!
let tf = MDCTextInputControllerOutlined()

override func viewDidLoad() 
        super.viewDidLoad()
        textfieldFloating.leftView = UIImageView(image: UIImage(named: "ic_lock_outline_white_18pt"))
        textfieldFloating.leftViewMode = .always
        textfieldFloating.placeholder = "Placeholder"
        tf.textInput = textfieldFloating

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
        self.view.endEditing(true)
    

【问题讨论】:

不幸的是,这是材料组件中的一个错误,最好等到他们自己修复错误 我已经重新创建了你的代码,它对我来说绝对是一个使用 MaterialComponents 的错误。可能与占位符的动画有关,就好像你快速点击它还没有完成动画但是它的位置坐标已经更新了。 感谢您告诉我。恐怕我忘记了代码中可能导致此问题的某个地方,但是如果问题出在库本身,您能建议我哪个库可以像这样工作吗?我正在尝试使用 SkyFloatingLabelTextField 但它们的动画不如材质组件流畅 @Anonymous-E 这个问题已经解决了吗?我正在使用 swift 4.2 但可能在 swift 5 中它已经修复了,你有没有为这个文本字段找到任何好的替代方案,我也遇到了同样的问题。 @MarkDylanBMercado 我已经更新到最新版本,现在运行良好 【参考方案1】:

我个人会选择https://github.com/raulriera/TextFieldEffects CocoaPod 它有很多不同的样式供你使用,最重要的是它非常简单易用。

只需使用pod init 创建一个 pod 文件 然后添加:

use_frameworks!
pod 'TextFieldEffects'

到您的 pod 并从终端使用 pod install 安装它。

使用它:

该库是一个简单的插件,只要您将子类设置为其中一种效果并将模块设置为 TextFieldEffects,您就可以在故事板中看到所有 IBDesignable 设置。

您也可以根据需要以编程方式使用它而无需情节提要:

let textField = KaedeTextField(frame: textFieldFrame)
textField.placeholderColor = .darkGrayColor()
textField.foregroundColor = .lightGrayColor()

view.addSubView(textField)

【讨论】:

在我使用 MDC 文本字段之前,我也尝试过查看这个库,但是他们的动画与 Material Component 不匹配,因为我是 ios 开发人员,我正在从事的项目是需要的不过要与安卓版本相匹配,无论如何感谢您的回答。不过,您的回答可能对其他人有用!我会赞成这个

以上是关于Swift:MaterialComponents TextFields快速单击时出现意外的占位符行为的主要内容,如果未能解决你的问题,请参考以下文章

带有 MaterialComponents 主题的 ActionBar 背景

使用 Theme.MaterialComponents.Light.NoActionBar 样式时,设置 Button Background 无效

错误:IllegalArgumentException:此组件上的样式要求您的应用主题为 Theme.MaterialComponents

带有 MaterialComponents 主题的 Android FAB 图标始终为黑色

由于 MDFInternationalization 和 MaterialComponents 目录不存在,无法 tns 构建 ios

Material Components 主题渲染 TextButton 不正确