Nhận Giá trị của một UITextField khi các tổ hợp phím được nhập?


107

Giả sử tôi có mã sau:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

Tôi muốn greetingLabelđọc "Xin chào [nameTextField]" ngay khi người dùng nhấn bất kỳ phím nào.

Những gì tôi cần về cơ bản là iPhone tương đương với phương pháp đại biểu Cocoa controlTextDidChange.

Các textField:shouldChangeCharactersInRange:phương pháp đại biểu được gọi mỗi khi một tổ hợp phím xảy ra:

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

Đối số chuỗi trả về ký tự được nhấn. Tuy nhiên, textFieldgiá trị thực của ( nameTextField.text) vẫn trống.

Tôi còn thiếu gì ở đây? (Tôi muốnnameTextField phản ánh chuỗi chính xác mà người dùng đã nhập cho đến nay).

Câu trả lời:


197

Hóa ra, cách dễ nhất để làm điều này là sử dụng Trình tạo giao diện:

  • Thêm một IBAction (vào ViewController, chẳng hạn như trong trường hợp này)
  • Ctrl-Click (hoặc nhấp chuột phải) vào UITextField trong Interface Builder
  • Kết nối sự kiện "Chỉnh sửa đã thay đổi" với IBA của chủ sở hữu tệp được thêm vào trong bước đầu tiên.

Hoạt động như một sự quyến rũ :) (Tôi không thể tin rằng tôi đã dành nhiều ngày cho việc này, và bây giờ nhận ra rằng giải pháp đơn giản hơn tôi nghĩ rất nhiều: P)


2
Cảm ơn! Tôi đang sử dụng "Giá trị đã thay đổi" giống như bạn sử dụng với UISlider, v.v. Điều thú vị là chúng sẽ có hai sự kiện dường như có cùng hành vi.
wjl

1
Vì lý do nào đó, tôi vẫn muốn có một cách lập trình để làm điều này ... nhưng tôi đã nhượng bộ ... Phương pháp này Rocks! Cảm ơn bạn đã chia sẻ ... Tôi đã từng thấy nó trước đây nhưng sau nhiều ngày viết mã não của tôi không còn hoạt động nữa hehe.
Albert Renshaw

8
@AlbertRenshaw Nhưng bạn có thể làm điều này theo cách lập trình;) Chỉ cần thực hiện [textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged];).
Vive

101

bạn có thể đăng ký một hành động cho sự kiện UIControlEventE EditChanges trên trường văn bản:

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

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

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

}

Có cách nào để chỉ định điều này bằng Trình tạo giao diện không?
PlagueHammer

11

UITextFieldcó một thông báo UITextFieldTextDidChangesẽ được kích hoạt mỗi khi văn bản thay đổi nếu bạn đăng ký. Chỉ cần đăng ký thông báo đó và trong phương thức được gọi bởi thông báo, hãy thay đổi văn bản của nhãn.

Để thêm vào điều này, đối tượng được chuyển đến trình xử lý thông báo của bạn sẽ có văn bản của UITextField .

Hy vọng rằng sẽ giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.