web-dev-qa-db-ja.com

iPhone入力中にUITextFieldのテキストを取得する方法は?

別のUITextFieldUILabelに加えられた変更を表示しようとしています。ユーザーが入力する各文字の後に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からテキストを取得するにはどうすればよいですか?

ありがとうございました!

60
Alex Stone
  1. 最初にUITextFieldUILabelをストーリーボード/ nibに追加します
  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];
    }
    

お役に立てれば。

140
Mrunal

「編集変更」イベントを処理するだけです

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

セレクター:

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

これを手動で行うか、ストーリーボードを使用して、Ctrlキーを押しながら「編集済み」送信イベントを.hにドラッグして、editedChangedメソッドを作成します。

70
Fabs

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

}

Swiftパイオニア

5
ColossalChris

AddTargetを使用したSwift Swift 2.0+

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

selectorを実装します

func textFieldTyping(textField:UITextField)
{
    //Typing
}
5
UnRewa

Swift 3.0の場合:

これらのソリューションの一部は、1文字遅れていた、または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)
        }
    }
2
Dave Levy

Swift 3.0+:これは非常にうまく機能しました。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    self.yourLabel.text = "\(textField.text ?? "")\(string)"
    return true
}
0
dsunku
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!
                }


            } 
    }
0
Amul4608