Ich mache ein UITextField
, das ein UIPickerView
as hat inputView
. Es ist alles gut, außer dass ich Text kopieren, einfügen, ausschneiden und auswählen kann und es nicht will. Nur die Auswahl sollte das Textfeld ändern.
Ich habe gelernt, dass ich die Bearbeitung durch Einstellen setEnabled
oder setUserInteractionEnabled
auf deaktivieren kann NO
. Ok, aber das TextField reagiert nicht mehr auf Berührungen und der Picker wird nicht angezeigt.
Was kann ich tun, um dies zu erreichen?
ios
uitextfield
uipickerview
Luiz de Prá
quelle
quelle
Übersetzen Sie die Antwort von Nick auf schnell:
P / S: Rückgabe false => Die Textfelder können nicht eingegeben und über die Tastatur bearbeitet werden. Es kann nur Text durch code.EX setzen: textField.text = "My String Here"
quelle
Dies wäre die einfachste von allen:
in viewDidLoad: (Legen Sie den Delegaten nur für Textfelder fest, die nicht bearbeitet werden dürfen.
und fügen Sie diese Delegatenfunktion ein:
Das ist es!
quelle
UIPickerView
Verhalten dieser Delegatmethode auslösen , funktioniert es gut.In schnellem 3+:
quelle
Es wäre eleganter, eine benutzerdefinierte Unterklasse zu erstellen
UITextField
, dieNO
für alle Aufrufe voncanPerformAction:withSender:
(oder zumindest woaction
ist@selector(cut)
oder@selector(paste)
) zurückgegeben wird, wie hier beschrieben .Darüber hinaus würde ich auch implementieren - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) Bereich ErsatzString: (NSString *) Zeichenfolge gemäß Nicks Vorschlag, um die Eingabe von Text über Bluetooth-Tastaturen zu deaktivieren.
quelle
canPerformAction
undshouldChangeCharactersInRange
Methoden werden niemals aufgerufen.Platzieren Sie einfach einen UIButton genau über dem gesamten UITextField ohne Label-Text, wodurch es "unsichtbar" wird. Diese Schaltfläche kann Berührungen anstelle des Textfelds empfangen und delegieren, und der Inhalt des Textfelds ist weiterhin sichtbar.
quelle
In Swift:
quelle
Ich habe die von MrMage bereitgestellte Lösung verwendet. Das einzige, was ich hinzufügen möchte, ist, dass Sie UITextView als Ersthelfer zurücktreten sollten, da Sie sonst mit dem ausgewählten Text nicht weiterkommen.
Hier ist mein schneller Code:
quelle
Eine Alternative für UIPickerView und Action Sheets finden Sie unter ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
Es sind Cocoapods aktiviert. Es behandelt alle Schaltflächen zum Abbrechen und Fertigstellen im Aktionsblatt. Die Beispiele innerhalb des Beispielprojekts sind großartig. Ich wähle den ActionSheetStringPicker, der einfach nur auf Zeichenfolgen basierende Optionen verarbeitet, aber die API kann fast alles verarbeiten, was mir einfällt.
Ich habe ursprünglich eine Lösung gestartet, die der mit einem Häkchen versehenen Antwort ähnelt, bin jedoch auf dieses Projekt gestoßen und habe ungefähr 20 Minuten gebraucht, um Dinge für die Verwendung in meine App zu integrieren, einschließlich der Verwendung von Cocopods: ActionSheetPicker (~> 0.0)
Hoffe das hilft.
Laden Sie das Git-Projekt herunter und sehen Sie sich die folgenden Klassen an:
Hier ist ungefähr der größte Teil des Codes, den ich hinzugefügt habe, sowie die * .h-Importe.
quelle
So verhindern Sie die Bearbeitung von UITextField, während Sie UIPickerView zum Auswählen von Werten verwenden (in Swift):
quelle
Diese Problemumgehung funktioniert. Platzieren Sie eine transparente UIView über dem Textfeld und implementieren Sie den folgenden Code:
quelle
Stellen Sie sicher, dass Ihre Eingabeansicht durch ein verstecktes Textfeld dargestellt wird, das auch den Text des dargestellten und deaktivierten Textfelds ändert.
quelle
Ich benutzte :
und seine Arbeit gut
quelle
Das hat bei mir funktioniert
[textview setEditable:NO];
Die obigen Antworten machen die Situation zu kompliziert.quelle