11 Stimmen

UITextField-Hintergrund bei Beginn der Bearbeitung ändern

Ich möchte das Hintergrundbild eines UITextFields ändern, wenn es der ersteResponder wird, um dem Benutzer zu zeigen, dass es den Fokus hat, ähnlich wie bei den Pseudoklassen :active oder :focus in CSS.

Ich vermute, dass ich dies möglicherweise programmgesteuert tun muss; jede Hilfe ist also sehr willkommen.

-Giles

29voto

Ziconic Punkte 804

Der sauberste Weg ist IMHO, eine Unterklasse UITextField und außer Kraft setzen becomeFirstResponder y resignFirstResponder um das Hintergrundbild des Textfeldes zu ändern. Auf diese Weise können Sie Ihre neue Unterklasse überall verwenden, ohne die Delegatenmethoden zum Ändern des Hintergrunds neu implementieren zu müssen.

- (BOOL)becomeFirstResponder {
    BOOL outcome = [super becomeFirstResponder];
    if (outcome) {
      self.background = // selected state image;
    }
    return outcome;
}

- (BOOL)resignFirstResponder {
    BOOL outcome = [super resignFirstResponder];
    if (outcome) {
      self.background = // normal state image;
    }
    return outcome;
}

27voto

Adrian Kosmaczewski Punkte 7921

Sie könnten genauso gut die UITextFieldDelegate-Methoden verwenden (IMHO einfacher zu pflegen als Key-Value-Beobachter):

#pragma mark -
#pragma mark UITextFieldDelegate methods

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    _field.background = [UIImage imageNamed:@"focus.png"];
    return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    _field.background = [UIImage imageNamed:@"nofocus.png"];
    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

Dies funktioniert nur, wenn die Eigenschaft UITextField.borderStyle von einem anderen Typ als UITextBorderStyleRoundedRect ist (in diesem Fall wird die Eigenschaft background nicht berücksichtigt). Das bedeutet, dass Sie den obigen Code mit UITextBorderStyleBezel, UITextBorderStyleLine und UITextBorderStyleNone verwenden können, wie in der borderStyle-Dokumentation erläutert:

borderStyle

Der für das Textfeld verwendete Rahmenstil.

@property(nonatomic) UITextBorderStyle borderStyle

Diskussion

Der Standardwert für diese Eigenschaft ist UITextBorderStyleNone. Wenn ein benutzerdefiniertes Hintergrundbild eingestellt ist, wird diese Eigenschaft ignoriert.

Dies ist die Dokumentation für die Eigenschaft background von UITextField:

Hintergrund

Das Bild, das die Hintergrundbild des Textfeldes Feldes darstellt, wenn es aktiviert ist.

@property(nonatomic, retain) UIImage *Hintergrund

Diskussion

Wenn gesetzt, ersetzt das Bild, auf das diese Eigenschaft Eigenschaft referenzierte Bild ersetzt die Standard Erscheinungsbild, das durch die Eigenschaft borderStyle-Eigenschaft gesteuert wird. Hintergrund Bilder werden im Rahmen gezeichnet Rechteck des Bildes gezeichnet. Bilder die Sie für den Hintergrund des Textfelds verwenden Hintergrund verwenden, sollten sich passen.

3voto

Wissa Punkte 1158

SWIFT 4

textField.addTarget(self, action: #selector(anyFunction), for: UIControlEvents.editingDidBegin)

@objc func anyFunction() {
    // Add your conde here
}

0voto

Elfred Punkte 3851

Sie können wahrscheinlich versuchen, auf Änderungen an isFirstResponder. zu achten und den Hintergrund in der Benachrichtigungsmethode zu ändern. Etwas wie:

[textField addObserver:theObserver forKeyPath:@"isFirstResponder" options:0 context:nil];

Dann im Beobachter:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if(object == textField && [keyPath isEqual:@"isFirstResponder"]) {
        //fiddle with object here
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X