ios iPhone如何在打字时获取UITextField的文本?

4zcjmb1e  于 2022-12-24  发布在  iOS
关注(0)|答案(7)|浏览(270)

我尝试在单独的UILabel上显示对UITextField所做的更改。是否有方法在用户键入每个字符后捕获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中取出文本?**

谢谢大家!

q3aa0525

q3aa05251#

1.首先将一个UITextFieldUILabel添加到故事板/ nib
1.现在将UILabel赋值为IBOutlet(这里我使用了 myLabel
1.将UITextFieldDelegate分配给文件所有者,并在.h文件中实现相同的委托
1.使用以下代码行:

- (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];
 }
zzzyeukh

zzzyeukh2#

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

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

以及选择器:

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

您可以手动执行此操作,也可以使用情节提要,方法是按住Ctrl键并将“Editing changed”Sent事件拖动到您的.h,为您创建editingChanged方法。

ruoxqz4g

ruoxqz4g3#

带有addTarget的Swift 2.0+

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

并实现selector

func textFieldTyping(textField:UITextField)
{
    //Typing
}
p4tfgftt

p4tfgftt4#

在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
 }

}

希望对你们这些快速先锋有所帮助

f3temu5u

f3temu5u5#

在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)
        }
    }
k3fezbri

k3fezbri6#

Swift 3.0+:这对我来说非常有效。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    self.yourLabel.text = "\(textField.text ?? "")\(string)"
    return true
}
f0brbegy

f0brbegy7#

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!
                }

            } 
    }

相关问题