2012-04-10 4 views
11

Ich habe einen benutzerdefinierten inputView zu meinem UITextField festgelegt. Ich brauche einen Weg, um die Daten anzuzeigen, die in meinem benutzerdefinierten inputView in UITextfield ausgewählt sind. Ich möchte das genauso erreichen, wie es die Systemtastatur tut.Benutzerdefinierte inputView für UITextField, wie leite ich die Eingabe zurück in das Textfeld?

Weiß jemand, wie das gemacht wird? Wie erhält die Systemtastatur einen Verweis auf die UITextfield, die der Ersthelfer ist?

+0

bitte präzisieren, was meinst du mit "direkte Eingabe zurück in das Textfeld"? Sie möchten das UITextField fokussieren? – Dion

+0

Sorry, ich dachte, ich wäre genauer in meiner Erklärung. Was ich meine ist, ich setze die Eigenschaft inputView auf einem UITextField auf meine benutzerdefinierte Eingabeansicht. Also, wenn der Benutzer eine Taste auf meine benutzerdefinierte inputView drückt, wie bekomme ich einen Verweis auf die UITextfield, die der aktuelle Ersthelfer, so dass ich die Texteigenschaft dieses UITextfield ändern kann, um die Eingabe des Benutzers widerzuspiegeln? –

Antwort

12

Wie bekommt die Systemtastatur einen Verweis auf das UITextfield, das der Ersthelfer ist?

Es fragt nur das System für den Ersthelfer; Leider ist das eine private UIKit-Methode (oder wurde zuletzt überprüft). Sie können den Ersthelfer finden, indem Sie durch die Ansichtshierarchie rekursiv gehen und jede Ansicht fragen, aber das ist ziemlich ungeschickt.

Stattdessen können Sie einen Link auf das Textfeld auf der Eingabe-Ansicht (Ich gehe davon aus Ihrer Eingabe Ansicht wird eine benutzerdefinierte UIView Unterklasse):

@property(nonatomic, assign) UITextField* target; 

dann die Delegierten UITextField verwenden Methoden aus Ihrer Sicht Controller, um zu sehen, wenn das Textfeld fokussiert wird:

- (void)textFieldDidBeginEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = textField; 
} 

- (void)textFieldDidEndEditing:(UITextField*)textField 
{ 
    if ([textField.inputView isKindOfClass:[MyInputView class]]) 
     ((MyInputView*)textField.inputView).target = nil; 
} 
+0

Große Antwort dave, das ist genau das, was ich gesucht habe, danke. –

10

wenn die Eingangsansicht aus Ihrer benutzerdefinierten Eingangszurückschicken an das Textfeld ein, beachten Sie, dass Sie (sollen) verwenden, um die UIKeyInput Protokoll Methoden, die UITextField entsprechen. Nämlich:

- (void)deleteBackward; 
- (void)insertText:(NSString *)text; 
Verwandte Themen