【问题标题】:How to allow emoji in UITextField如何在 UITextField 中允许表情符号
【发布时间】:2019-07-22 07:27:50
【问题描述】:

我将 UITextField 中的输入限制为仅来自 shouldChangeCharactersIn 中的字母表中的字符:

switch textField {
    case descriptionTextField:
        return prospectiveText.containsOnlyCharactersIn(matchCharacters: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZáäâàæãåāéëêèęėēóôòõœøōúüûùūíïìîįīÁÄÂÀÆÃÅĀÓÖÔÒÕŒØŌÚÜÛÙŪÍÏÌÎĮĪ ") && prospectiveText.count <= 51
    default:
        return true
}

现在,虽然这就像一个魅力,但我希望用户也可以插入表情符号。有什么办法可以做到这一点吗?我不希望他们插入数字或特殊字符。

【问题讨论】:

  • 您不应该对允许的字符进行硬编码。使用CharacterSet.letters 检查字符串是否仅包含字母。至于表情符号,看看Find out if character in string is emoji
  • 您能否详细说明为什么我不应该对允许的字符进行硬编码?我相信你 - 但想知道为什么。感谢您的意见!
  • 因为您永远无法确定迭代所有字符,尤其是对于所有不同的语言环境。 CharacterSet 的存在是有原因的,它具有几乎所有 Unicode 类别的集合,因此您可以确保它正确处理所有可能的输入。可能的字符比您可以安全且肯定地硬编码的字符多得多,因此您很可能会遗漏一些有效的输入。

标签: ios swift uitextfield emoji


【解决方案1】:

只需检查反向条件,在条件中,包括数字和所有特殊字符,并在prospectiveText.containsOnlyCharactersIn 之前加上'',所以如果找到任何你指定的数字和特殊字符,那么它将返回 false。

switch textField {
    case descriptionTextField:
        return !prospectiveText.containsOnlyCharactersIn(matchCharacters: "<put here numbers and all your symbols you want to ignore> ") && prospectiveText.count <= 51
    default:
        return true
}

【讨论】:

  • 似乎是一个合适的解决方案。只是等大卫的回复,看看这样是否可行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 2017-10-01
  • 2021-10-14
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多