Tuş vuruşları girilirken UITextField Değerini almak?


107

Diyelim ki şu koda sahibim:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

greetingLabelKullanıcı herhangi bir tuşa basar basmaz "Merhaba [nameTextField]" ifadesini okumak istiyorum .

Temel olarak ihtiyacım olan şey, Cocoa delege yönteminin iPhone eşdeğeridir controlTextDidChange.

textField:shouldChangeCharactersInRange:Temsilci yöntemi bir tuş vuruşu meydana gelir, her zaman adı:

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

Dize argümanı, basılan karakteri döndürür. Ancak gerçek textFielddeğeri ( nameTextField.text) boş kalır.

Burada neyi özlüyorum? ( nameTextFieldKullanıcının şu ana kadar girdiği dizeyi tam olarak yansıtmak istiyorum ).

Yanıtlar:


197

Görünüşe göre, bunu yapmanın en kolay yolu Interface Builder'ı kullanmak:

  • Bir IBAction ekleyin (bu durumda olduğu gibi, ViewController'a)
  • Arabirim Oluşturucu'da UITextField üzerinde Ctrl-tıklayın (veya sağ tıklayın)
  • "Değiştirilen Düzenleme" olayını, ilk adımda eklenen Dosya Sahibinin IBAction'ına bağlayın.

Tılsım gibi çalışıyor :) (Bunun için günler geçirdiğime inanamıyorum ve çözümün düşündüğümden çok daha basit olduğunu şimdi anlamak için: P)


2
Teşekkürler! Bir UISlider vb. İle kullandığınız gibi "Değer Değiştirildi" yi kullanıyordum. Aynı davranışa sahip gibi görünen iki olayları olması ilginç.
wjl

1
Nedense bunu yapmanın programlı bir yolunu hala istiyordum ... ama teslim oldum ... Bu yöntem Rocks! Paylaştığınız için teşekkür ederim ... Bunu daha önce görmüştüm ama kodlama günlerinden sonra beynim artık çalışmıyor hehe.
Albert Renshaw

8
@AlbertRenshaw Ama bunu programlı bir şekilde yapabilirsiniz;) Sadece gerçekleştirin [textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged];).
Vive

101

metin alanında UIControlEventEditingChanges olayı için bir eylem kaydedebilirsiniz:

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

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

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

}

Arayüz Oluşturucuyu kullanarak bunu belirlemenin bir yolu var mı?
PlagueHammer

11

UITextFieldUITextFieldTextDidChangekaydolursanız, metin her değiştiğinde tetiklenecek bir bildirime sahiptir. Sadece bu bildirim için kaydolun ve bildirimde belirtilen yöntemde etiketin metnini değiştirin.

Buna eklemek için, bildirim işleyicinize iletilen nesnede UITextField.

Umarım yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.