2012-04-28 6 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에서 텍스트를 취할 수 있습니까?

고맙습니다! 먼저 스토리 보드 하나 UITextFieldUILabel를 추가

+0

체크 아웃 : http://stackoverflow.com/questions/388237/getting-the-value-of-a-uitextfield-as-keystrokes-are-entered – hanumanDev

답변

134
  1. /펜촉
  2. 이제도 .H에서 같은 대리자를 구현, 소유자를 제출
  3. 지정 UITextFieldDelegate (내가 myLabel를 사용하고 여기에) UILabel에 대한 IBOutlet 지정

    - (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. 이 코드 줄을 사용하여 파일

희망이 도움이됩니다. 보낸 "변경된 편집"

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

당신은 수동으로 수행하거나, Ctrl 키를 드래그하여 스토리 보드와 수 :

+0

Hummmmm 그게 아주 좋은 들으. ..... :) –

+0

그것은 나를 위해 작동합니다 .... –

+0

하나씩 문자를 삭제하면. –

67

은 간단하게 "편집 변경됨"이벤트

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

셀렉터를 처리 이벤트를 .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 
} 

} 

은 당신 신속 개척자

3

스위프트 addTarget을 가진 스위프트 2.0

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

을하는 데 도움이 희망과 구현 selector

func textFieldTyping(textField:UITextField) 
{ 
    //Typing 
} 
스위프트 3.
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! 
       } 


      } 
    } 
관련 문제