webentwicklung-frage-antwort-db.com.de

Wie kann ich den Return-Schlüssel in einem UITextField deaktivieren/aktivieren?

Gibt es eine Möglichkeit, die Return-Taste für die UIKeyboard programmgesteuert zu aktivieren oder zu deaktivieren? Die nächste, die ich finden könnte, ist enablesReturnKeyAutomatically , aber das sagt nur, ob sie überhaupt deaktiviert werden soll.

63
Sophie Alpert

Wenn Sie das UIKeyboard-Objekt selbst erhalten können (etwas, das im SDK nicht angezeigt wird, wenn Sie diese Aufrufe verwenden, ist Apple möglicherweise nicht glücklich), gibt es eine praktische setReturnKeyEnabled: -Member-Funktion.

id keyboard = [self magicallyGetAUIKeyboardInstance];
[keyboard setReturnKeyEnabled: NO];

(via Erica Saduns Dump der 2.2 iPhone-Frameworks)

Die Implementierung von magicallyGetAUIKeyboardInstance wird hier beschrieben.

23
Elliot Kroo

Kann folgenden Code-Segment-Hilfen sein.

textfield.enablesReturnKeyAutomatically = YES;

Dies ist im iPhone SDK in UITextInputTraits öffentlich verfügbar. Mit dieser wird die Return-Taste deaktiviert, wenn innerhalb des Textfeldes kein Eingabetext verfügbar ist

70

Die UITextField-Eigenschaft von enablesReturnKeyAutomatically kann direkt im Interface Builder festgelegt werden. Wählen Sie einfach das Textfeld aus und öffnen Sie den Inspektor für Attribute. Wie Tharindu feststellte, wird der Return-Schlüssel automatisch aktiviert und deaktiviert, je nachdem, ob Text eingegeben wurde.

enter image description here

Wenn Sie dies im Code ändern müssen, können Sie es natürlich mithilfe von nameTextField.enablesReturnKeyAutomatically = true programmgesteuert festlegen. 

EDIT um die Downvotes anzusprechen:

Andernfalls gibt es keine offizielle Möglichkeit, die Return-Taste auf Befehl zu aktivieren und zu deaktivieren. Ich würde davon abraten, private APIs zu verwenden, um dies zu erreichen. Alternativ können Sie die Delegate-Methode textFieldShouldReturn: verwenden und dort Ihre Bedingungen/Validierungen eingeben und entsprechend reagieren.

25
Kyle Clegg

Sie können das UITextField-Attribut von hasText überschreiben, um dies zu erreichen:

class CustomTextField : UITextField {
    override public var hasText: Bool {
        get {
            return evaluateString(text)
        }
    }
}

Dabei prüft evaluateString(_ text: String?) -> Bool Ihre erforderlichen Eingabekriterien, beispielsweise die Anzahl der Zeichen.

Natürlich funktioniert das nur in Kombination mit enablesReturnKeyAutomatically = true, das auf der UITextField eingestellt ist.

Ich bin mir bewusst, dass meine Antwort weder zeitlich noch in Objective-C geschrieben ist, aber da ich an keiner anderen Stelle eine Antwort finden konnte und diese Frage in anderen Threads routinemäßig angesprochen wird, denke ich, dass dies der beste Ort dafür ist veröffentliche es. 

16
Janne

Eine gute Idee ist, eine Datei zu erstellen, um von überall auf diese Klasse zuzugreifen. Hier ist der Code:

UIKeyboard.h

#import <UIKit/UIKit.h> 

@interface UIApplication (KeyboardView)

    - (UIView *)keyboardView; 

@end

UIKeyboard.m

#import "UIKeyboard.h"

@implementation UIApplication (KeyboardView)

- (UIView *)keyboardView
{
    NSArray *windows = [self windows];
    for (UIWindow *window in [windows reverseObjectEnumerator])
    {
        for (UIView *view in [window subviews])
        {
            if (!strcmp(object_getClassName(view), "UIKeyboard"))
            {
                return view;
            }
        }
    }

    return nil;
}

@end

Nun können Sie diese Klasse aus Ihrer eigenen Klasse importieren und darauf zugreifen:

#import "UIKeyboard.h"

    // Keyboard Instance Pointer.
    UIView *keyboardView = [[UIApplication sharedApplication] keyboardView];

Eine vollständige Dokumentation dieser Klasse finden Sie hier:http://ericasadun.com/iPhoneDocs/_u_i_keyboard_8h-source.html

Weitere Informationen finden Sie hier:http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

Versuchen Sie, ein UITextField zu verwenden! um diese Saite zu erhalten und dann sind die Rücksendungen weg!

0
Jean Luiz

Hier ist eine Technik, die über die dokumentierte API verfügbar ist. Sie bietet jedoch kein visuelles Feedback, wenn die Eingabetaste deaktiviert ist.

- (void)setup {
    // Or in init
    self.textField.delegate = self;
}

// <UITextFieldDelegate>
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // substitute your test here
    return [textField.text rangeOfString:@"@"].location != NSNotFound;
}

Andere Antworten können hier verwendet werden 

[textField addTarget:self
              action:@selector(validateTextField:)
    forControlEvents:UIControlEventEditingChanged];

dynamisches visuelles Feedback, wenn der Benutzer eingibt.

0
Rik Renich