【问题标题】:Make UITextField accept small alphabet letter only in Swift?让 UITextField 只在 Swift 中接受小写字母?
【发布时间】:2017-04-03 09:28:02
【问题描述】:

我想制作只接受小写字母而不是大写字母或任何特殊符号或任何数字的文本字段。

【问题讨论】:

    标签: ios swift3 uitextfield


    【解决方案1】:

    您可以使用正则表达式,例如下面只允许小符号的正则表达式

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if string.isEmpty {
            return true
        }
        let regex = "[a-z]{1,}"
        return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: string)
    }
    

    【讨论】:

    • 让我仔细检查一下。
    • 您还必须 1. 让您的“ViewController”类继承自“UITextFieldDelegate”(所以 class ViewController: UIViewController, UITextFieldDelegate),然后将 usernameTextField.delegate = self 添加到 viewDidLoad
    【解决方案2】:

    试试下面的代码,它只会自动获取小写字母。

    import UIKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var textEntry: UITextField!
    
       //MARK : - Life Cycle
        override func viewDidLoad() {
            super.viewDidLoad()
           textEntry.addTarget(self, action: #selector(self.textFieldDidChange), for: .editingChanged)
        }
    
        //MARK: - Lower letter function
        func textFieldDidChange(sender: UITextField) {
            sender.text = sender.text?.lowercased()
            print(textEntry.text ?? "") //Check your text output here
        }
     }
    

    【讨论】:

    • 让我仔细检查一下。
    • 好的,先检查一下,肯定可以的。 @SakirSherasiya
    • 它将大写字母转换为小写字母,我不想要它。
    • 让我添加这个功能。 @SakirSherasiya
    • 同理将大写字母转小写。
    【解决方案3】:

    你也可以用这个,

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
        // Return false when user tries to delete but textField is empty
        let currentCharacterCount = textField.text?.characters.count ?? 0
        if (range.length + range.location > currentCharacterCount) {
            return false
        }
    
        // Return true when user tries to delete but textField is not empty
        if string == "" {
            return true
        }
    
        let userEnteredString = textField.text ?? ""
        let newString = (userEnteredString as NSString).replacingCharacters(in: range, with: string) as NSString
    
        return ((newString as String).range(of: "^[a-z]+$", options: .regularExpression) != nil)
    
    }
    

    【讨论】:

    • 让我仔细检查一下。
    【解决方案4】:

    要限制大写字母、数字和特殊符号,请在文本视图委托方法 textField:shouldChangeCharactersInRange: 中返回除小写字母以外的 false

    Swift 3.0:

     func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
            var myCharSet = CharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyz")
            for i in 0..<(string.characters.count ?? 0) {
                var c: unichar = string[i]
                if !myCharSet.characterIsMember(c) {
                    return false
                }
            }
            return true
        }
    

    【讨论】:

    • 我的问题是文本字段中只接受小写字母
    • 看看我的回答。
    • 让我仔细检查一下。
    • CharacterInMember 中的错误。
    【解决方案5】:

    检查这个更新的代码:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
        NSLog(@"textField:shouldChangeCharactersInRange:replacementString:");
             NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz"];
            for (int i = 0; i < [string length]; i++)
            {
                unichar c = [string characterAtIndex:i];
                if (![myCharSet characterIsMember:c])
                {
                    return NO;
                }
            }
    
            return YES;
        }
    
    }
    

    在 Swift 中

     func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
            let set = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyz").invertedSet
            return string.rangeOfCharacterFromSet(set) == nil
    
        }              
    

    【讨论】:

    • 如果他理解逻辑,他可以很容易地转换它@NiravD。
    • 我只是建议你编辑你的答案其余的取决于你。
    • 是的......我正在帮助他解决问题......:D就是这样......冷静@NiravD
    • 现在检查@SakirSherasiya
    • 如果您有任何问题评论,请查看@SakirSherasiya
    【解决方案6】:
    1. 你必须用你自己的类继承 UITextFieldDelegate 类

      class ViewController: UIViewController, UITextFieldDelegate {

    2. 添加一个 IBOutlet

      @IBOutlet weak var firstName: UITextField!

    3. 你必须确保这个对象正在使用

      override func viewDidLoad() {
          super.viewDidLoad()
          firstName.delegate = self
      }
      
      func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
          if textField == firstName {
              let allowedCharacters = "abcdefghijklmnopqrstuvwxyz"
              let allowedCharacterSet = CharacterSet(charactersIn: allowedCharacters)
              let typedCharacterSet = CharacterSet(charactersIn: string)
              let alphabet = allowedCharacterSet.isSuperset(of: typedCharacterSet)
              return alphabet
          }
      }
      

    【讨论】:

    • 您必须使用UITextFieldDelegate,而不是UITextViewDelegate(因为您使用的是TextField),否则会出现错误:Cannot assign value of type 'ViewController' to type 'UITextFieldDelegate?'将其更改为建议的self as! UITextFieldDelegate然后抛出一个Thread 1: signal SIGABRT.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多