2012-04-28 26 views
59

UITextFieldの変更を別のUILabelに表示しようとしています。ユーザーが入力する各文字の後にUITextFieldのフルテキストをキャプチャする方法はありますか?現在、このメソッドを使用していますが、ユーザーが最後に入力した文字は取得されません。iPhone入力中に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の外のテキストを取ることができますか?

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

+0

チェックアウト:http://stackoverflow.com/questions/388237/getting-the-value-of-a-uitextfield-as-keystrokes-are-entered – hanumanDev

答えて

134
  1. まず今の.hで同じデリゲートを実装しても、所有者をファイルに割り当てUITextFieldDelegateUILabelためIBOutlet(ここで私はmylabelというを使用している)
  2. を割り当てる/ペン先
  3. を絵コンテ1つUITextFieldUILabelを追加

    - (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]; 
    } 
    
  4. :ファイル
  5. は、これらのコード行を使用します

これが役立ちます。

+0

Hummmmmザッツ非常に素晴らしいThxを。 ..... –

+0

それは私のために働く.... –

+0

私は文字を一つずつ削除すると。 –

67

単に「編集変更」イベント

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

とセレクターハンドル:あなたはCTRL-ドラッグ送信済み「の編集を変更」によって、手動、またはストーリーボードでこれを行うことができます

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

をイベントを.hに追加して、editingChangedメソッドを作成します。

+3

あなたのソリューションを呼び出すこのメソッドは完璧です!ありがとう – SpaceDog

+10

これは実際に受け入れられたより良い解決策です。ありがとう!受け入れられた答えは、テキストフィールドから最後の文字を削除すると、ラベルテキストを完全に消去しません。 – Menno

+0

これは回答 – Lucas

5

スウィフト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 
} 

} 

それはあなたの迅速な開拓者addTargetスウィフトと

3

スウィフト2.0+

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

そしてselector

func textFieldTyping(textField:UITextField) 
{ 
    //Typing 
} 
を実装役に立てば幸いスウィフト3.0では
1

これらのソリューションの中には、背後にある1つの文字、またはスウィフトとのObj-Cの以前のバージョンのためでした。ここで私はSwift 3.0に何を使用しているのですか

クラスでは、テキストを格納するプレースホルダを宣言しました。

var tempName = "" 

は、のviewDidLoadでは私が使用:

func typingName(textField:UITextField){ 

     if let typedText = textField.text { 
      tempName = typedText 
      print(tempName) 
     } 
    } 
0

スウィフト3.0+::これは私にとって非常にうまく働いていた

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

は、その後、私はと呼ばれる関数を作りました。

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


      } 
    } 
関連する問題