61

我试图UITextField在单独的UILabel. 有没有办法捕获UITextField用户输入的每个字符之后的全文?目前我正在使用这种方法,但它不会捕获用户输入的最后一个字符。

我知道UITextView有“didChange”方法,但我找不到UITextField.

//does not capture the last character

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

        [self updateTextLabelsWithText: textField.text];

    return YES;
}

输入每个字符后,如何从 UITextField 中取出文本?

谢谢!

4

7 回答 7

140
  1. 首先添加一个UITextFieldUILabel到情节提要/笔尖
  2. 现在分配IBOutletUILabel这里我使用了myLabel
  3. 分配UITextFieldDelegate给文件所有者,也在 .h 文件中实现相同的委托
  4. 使用这些代码行:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        [self updateTextLabelsWithText: newString];
    
        return YES;
    }
    
    -(void)updateTextLabelsWithText:(NSString *)string
    {
         [myLabel setText:string];
    }
    

希望这可以帮助。

于 2012-04-28T14:12:32.407 回答
73

只需处理“编辑更改”事件

[textField addTarget:self 
              action:@selector(editingChanged:)
    forControlEvents:UIControlEventEditingChanged];

和选择器:

-(void) editingChanged:(id)sender {
   // your code
}

您可以手动执行此操作,也可以通过 CTRL 拖动“编辑更改”发送事件到您的 .h 来使用情节提要,为您创建 editorChanged 方法。

于 2014-03-23T08:21:44.603 回答
7

Swift 与 addTarget Swift 2.0+

   titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)

并实施selector

func textFieldTyping(textField:UITextField)
{
    //Typing
}
于 2016-04-26T08:27:17.977 回答
6

在 Swift 2.0+

 class CheckInViewController: UIViewController, UITextFieldDelegate {

 override func viewDidLoad() {
    super.viewDidLoad()

    yourTextField.delegate = self

 }

 func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    var updatedTextString : NSString = textField.text as NSString
    updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string)

    self.methodYouWantToCallWithUpdatedString(updatedTextString)
    return true
 }

}

希望它可以帮助您快速开拓者

于 2015-11-05T17:27:23.893 回答
3

在 Swift 3.0 中:

其中一些解决方案落后于一个字符,或者用于早期版本的 Swift 和 Obj-C。这是我用于 Swift 3.0 的内容

在类中,我声明了一个占位符来存储文本。

var tempName = ""

在 ViewDidLoad 我使用:

nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)

然后我做了一个函数,叫做:

   func typingName(textField:UITextField){

        if let typedText = textField.text {
            tempName = typedText
            print(tempName)
        }
    }
于 2017-06-15T20:35:29.423 回答
0

Swift 3.0+:这对我来说效果很好。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    self.yourLabel.text = "\(textField.text ?? "")\(string)"
    return true
}
于 2018-02-20T23:20:41.750 回答
0
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if textField == yourTextFieldOutletName
        {
           if yourTextFieldOutletName.isEmpty == false
           {
             youtlabelname.text = yourTextFieldOutletName.text!
            }


        }

        return true

    }

func textViewDidEndEditing(_ textView: UITextView) {
       if textField == yourTextFieldOutletName
            {
               if yourTextFieldOutletName.isEmpty == false
               {
                 youtlabelname.text = yourTextFieldOutletName.text!
                }


            } 
    }
于 2018-03-07T05:53:13.903 回答