키 입력이 입력 될 때 UITextField의 값을 얻습니까?


107

다음 코드가 있다고 가정 해 보겠습니다.

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

greetingLabel사용자가 아무 키나 누르 자마자 "Hello [nameTextField]"를 읽고 싶습니다 .

기본적으로 필요한 것은 iPhone에 해당하는 Cocoa delegate method controlTextDidChange입니다.

textField:shouldChangeCharactersInRange:대리자 메서드는 키 스트로크 (keystroke)가 발생할 때마다 호출됩니다

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

문자열 인수는 누른 문자를 반환합니다. 그러나 실제 textField값 ( nameTextField.text)은 비어 있습니다.

내가 여기서 무엇을 놓치고 있습니까? ( nameTextField사용자가 지금까지 입력 한 정확한 문자열을 반영 하고 싶습니다 ).

답변:


197

이를 수행하는 가장 쉬운 방법은 Interface Builder를 사용하는 것입니다.

  • IBAction 추가 (이 경우와 같이 ViewController에)
  • Interface Builder의 UITextField에서 Ctrl- 클릭 (또는 오른쪽 클릭)
  • "Editing Changed"이벤트를 첫 번째 단계에서 추가 된 파일 소유자의 IBAction에 연결합니다.

매력처럼 작동합니다 :) (나는 이것에 수많은 날을 보냈다는 것을 믿을 수 없으며 이제 해결책이 생각보다 훨씬 간단하다는 것을 깨닫습니다 : P)


2
감사! UISlider 등에서 사용하는 것처럼 "Value Changed"를 사용하고 있습니다. 두 이벤트가 동일한 동작을하는 것처럼 보이는 것이 흥미 롭습니다.
wjl

1
어떤 이유에서인지 프로그래밍 방식으로이 작업을 수행하고 싶었지만 ...이 방법을 포기했습니다. Rocks! 공유 해주셔서 감사합니다 ... 전에 본 적이 있었지만 며칠 후에는 내 두뇌가 더 이상 작동하지 않습니다.
Albert Renshaw 2012

8
@AlbertRenshaw하지만 프로그래밍 방식으로 이것을 할 수 있습니다;) 그냥 수행 [textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged];).
Vive

101

텍스트 필드에 이벤트 UIControlEventEditingChanges에 대한 작업을 등록 할 수 있습니다.

[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

    greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];

}

Interface Builder를 사용하여 이것을 지정하는 방법이 있습니까?
PlagueHammer

11

UITextFieldUITextFieldTextDidChange등록하면 텍스트가 변경 될 때마다 실행 되는 알림 이 있습니다. 해당 알림에 등록하고 알림에 의해 호출 된 메서드에서 레이블의 텍스트를 변경하십시오.

여기에 추가하려면 알림 처리기에 전달 된 개체에 UITextField.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.