【问题标题】:How do I get the value of a UITextfield as characters are being typed in real time?当实时输入字符时,如何获取 UITextfield 的值?
【发布时间】:2021-02-18 17:11:18
【问题描述】:

我正在尝试实时调节 UITextfield 的输入,这意味着用户正在键入。我有这个字符集,我需要与输入字符串进行比较,并且在编辑时如果输入了无根据的字符,我想转发警报。这是我的字符集:

let acceptedChars = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_")

现在我如何实时捕获特定文本字段并跟踪其输入?

【问题讨论】:

  • 您可以使用 UITextField 委托方法 textField:shouldChangeCharactersInRange:replacementString: 为此目的
  • 为您的文本字段设置一个委托,并在 'textFieldShouldEndEditing' 方法中处理检查 - 参考:developer.apple.com/library/ios/documentation/UIKit/Reference/…:
  • 我的原始代码在textFieldShouldEndEditing 中被调用,它不会实时跟踪输入@nshebbar
  • 你能详细说明我如何使用该方法检查字符串中不在该集合中的字符@Nandu

标签: ios xcode swift uitextfield alert


【解决方案1】:

试试这个:

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        let invalidCharacters = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_").invertedSet
        if let range = string.rangeOfCharacterFromSet(invalidCharacters, options: nil, range:Range<String.Index>(start: string.startIndex, end: string.endIndex)) {
            return false
        }

        return true
    }

【讨论】:

  • 我在该方法中的哪个位置指定我想要定位的文本字段?
  • 检查是否(textfield == yourTextfield){}
【解决方案2】:

您可以像这样为值更改事件注册您的 textField

textfield.addTarget(self, action:"textFieldDidChange", forControlEvents:UIControlEvents.EditingChanged)

func textFieldDidChange(){
    // put your code
}

它适用于您实时输入的每个字符

【讨论】:

  • 完美而简单!为我工作。干得好!
【解决方案3】:
var strings: NSString?

class ViewController: UIViewController,UITextFieldDelegate //设置你的文本域委托

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{  if(textField .isEqual(your textfield))
    {
    strings=string;
    let acceptedChars = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_").invertedSet;

     if (strings!.rangeOfCharacterFromSet(acceptedChars.invertedSet).location != NSNotFound)
    {
        return true;
    }
    else
    {
        return false;
    }        
}
else
{
return true;
}
}

【讨论】:

  • 我标记了 swift 而不是 obj c
  • 你能快速回答吗
  • 不,它只是在我的屏幕上更新了@UsamaSadiq
  • 文本字段委托已经设置,我的问题是在该方法中我应该在哪里设置我想要定位的特定文本字段
  • 您是否为该文本字段创建了出口
【解决方案4】:

使用下面的方法

   func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
    {
        if textField.isEqual(<textField whose value to be copied>)
        {
            <TextField to be updated>.text = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)
        }
    
        return true
    }

【讨论】:

  • 我应该在哪里添加我的自定义字符集?
【解决方案5】:

一个简单的委托方法,真正更有效的是:

func textFieldDidChangeSelection(_ textField: UITextField) {
    print(textField.text)
}

【讨论】:

    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多