Gibt es eine Möglichkeit, die Eingabetaste auf dem programmgesteuert zu aktivieren oder zu deaktivieren UIKeyboard
? Das nächste, was ich finden konnte, ist enablesReturnKeyAutomatically
, aber das zeigt nur, ob es überhaupt deaktiviert werden soll.
ios
objective-c
xcode
cocoa-touch
Sophie Alpert
quelle
quelle
Antworten:
Möglicherweise hilft das folgende Codesegment:
textfield.enablesReturnKeyAutomatically = YES;
Dies ist im iPhone SDK in UITextInputTraits öffentlich verfügbar. Mit dieser Option wird die Eingabetaste deaktiviert, wenn im Textfeld kein Eingabetext verfügbar ist.
quelle
UITextField
DieenablesReturnKeyAutomatically
Eigenschaft von 'kann direkt im Interface Builder festgelegt werden. Wählen Sie einfach das Textfeld aus und öffnen Sie den Attributinspektor. Wie Tharindu sagte, wird dadurch die Eingabetaste automatisch aktiviert und deaktiviert, je nachdem, ob Text eingegeben wurde.Wenn Sie dies im Code ändern müssen, können Sie ihn natürlich weiterhin programmgesteuert festlegen
nameTextField.enablesReturnKeyAutomatically = true
.BEARBEITEN, um die Abstimmungen zu adressieren:
Andernfalls gibt es keine offizielle Möglichkeit, die Eingabetaste 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
textFieldShouldReturn:
Delegate-Methode verwenden und Ihre Bedingung / Validierung dort ablegen und entsprechend reagieren.quelle
Sie können das Attribut überschreiben
UITextField
,hasText
um dies zu erreichen:class CustomTextField : UITextField { override public var hasText: Bool { get { return evaluateString(text) } } }
Hier
evaluateString(_ text: String?) -> Bool
werden die erforderlichen Eingabekriterien überprüft, z. B. die Anzahl der Zeichen.Dies funktioniert natürlich nur in Kombination mit dem
enablesReturnKeyAutomatically = true
Set amUITextField
.Ich bin mir bewusst, dass meine Antwort weder aktuell noch in Objective-C geschrieben ist, aber da ich nirgendwo anders eine Antwort finden konnte und diese Frage routinemäßig in anderen Threads erwähnt wird, denke ich, dass hier der beste Ort dafür ist veröffentliche es.
quelle
Eine gute Idee ist es, 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
Jetzt 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
quelle
Meine Antwort auf die doppelte Frage , kopiert über :
Alle anderen Lösungen beantworten die Frage nicht. OP möchte die Eingabetaste auf der Tastatur als visuelles Signal an den Benutzer "grau" machen.
Hier ist meine Lösung für iOS 13. Möglicherweise müssen Sie die Lösung für andere iOS-Versionen geringfügig ändern.
Zuerst erweitere ich
UITextFieldDelegate
.func getKeyboard() -> UIView? { for window in UIApplication.shared.windows.reversed() { if window.debugDescription.contains("UIRemoteKeyboardWindow") { if let inputView = window.subviews .first? // UIInputSetContainerView .subviews .first // UIInputSetHostView { for view in inputView.subviews { if view.debugDescription.contains("_UIKBCompatInputView"), let keyboard = view.subviews.first, keyboard.debugDescription.contains( "UIKeyboardAutomatic") { return keyboard } } } } } return nil }
Wenn ich dann den "Return" -Schlüssel deaktivieren muss, können wir Folgendes tun (durch
delegate
den Variablennamen Ihres Delegatenobjekts ersetzen ):if let keyboard = delegate.getKeyboard(){ keyboard.setValue(text == nil, forKey: "returnKeyEnabled") }
quelle
Hier ist eine Technik, die über die dokumentierte API verfügbar ist, jedoch kein visuelles Feedback liefert, 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 hier können mit verwendet werden
[textField addTarget:self action:@selector(validateTextField:) forControlEvents:UIControlEventEditingChanged];
um dynamisches visuelles Feedback zu geben, während der Benutzer tippt.
quelle
Versuchen Sie ein UITextField zu verwenden! um diese Zeichenfolge zu erhalten und dann sind die Rückgabe weg!
quelle