Die UITextView
Funktionen Kopieren, Ausschneiden, Auswählen, Alle auswählen werden standardmäßig angezeigt, wenn ich auf den Bildschirm drücke. Aber in meinem Projekt UITextField
ist das nur schreibgeschützt. Ich benötige diese Funktionalität nicht. Bitte sagen Sie mir, wie ich diese Funktion deaktivieren kann.
ios
objective-c
uitextview
Aishwarya
quelle
quelle
Antworten:
Der einfachste Weg, Pasteboard-Vorgänge zu deaktivieren, besteht darin, eine Unterklasse zu erstellen
UITextView
, die diecanPerformAction:withSender:
Methode überschreibt, dieNO
für Aktionen zurückgegeben wird, die Sie nicht zulassen möchten:Siehe auch UIResponder
quelle
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- um alle Optionen zu blockierenUnterklasse UITextView und Überschreiben von canBecomeFirstResponder:
Beachten Sie, dass dies nur für nicht bearbeitbare UITextViews gilt! Habe es nicht an bearbeitbaren getestet ...
quelle
return NO;
auf- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
Methode ist eine bessere Option.Wenn Sie das Ausschneiden / Kopieren / Einfügen in Ihrer gesamten
UITextView
Anwendung deaktivieren möchten, können Sie eine Kategorie verwenden mit:Es spart eine Unterklasse ... :-)
quelle
UITextView
Gerät wie erwartet verhält, wenn es beispielsweise bearbeitet werden kann und eine Berührung erhält. Es ist viel zu überschreibencanPerformAction:withSender:
; Dafür ist das Protokoll da.Dies war die beste funktionierende Lösung für mich:
von: https://stackoverflow.com/a/5704584/1293949
quelle
@ rpetrich Antwort hat bei mir funktioniert. Ich poste den erweiterten Code für den Fall, dass jemand Zeit spart.
In meinem Fall möchte ich überhaupt kein Popup, aber ich möchte, dass das UITextField Ersthelfer werden kann.
Leider wird das Lupen-Popup immer noch angezeigt, wenn Sie auf das Textfeld tippen und es gedrückt halten.
Swift 4
quelle
Wenn Sie UITextView nicht zum Scrollen benötigen, besteht die einfachste Lösung ohne Unterklassifizierung darin, die Benutzerinteraktion für die Textansicht einfach zu deaktivieren:
quelle
Am einfachsten ist es, eine Unterklasse von UITextView zu erstellen, die die canPerformAction überschreibt: withSender:
quelle
Wenn ich in canPerformAction unter iOS 7 NEIN zurückgebe, werden viele Fehler wie folgt angezeigt:
<Error>: CGContextSetFillColorWithColor: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Meine Lösung lautet wie folgt:
Der Trick besteht darin, den Menü-Controller im nächsten Zyklus in der Hauptwarteschlange auszublenden (unmittelbar nachdem er angezeigt wird).
quelle
Dies ist der einfachste Weg, um das gesamte Menü Auswählen / Kopieren / Einfügen in einer UITextView zu deaktivieren
quelle
Seit iOS 7 gibt es eine Eigenschaft in UITextView:
Dies verhindert, dass eine Ansicht eine Textauswahl zulässt. Funktioniert super für mich.
quelle
Wenn Sie die Tastatur durch eine (z.
UIPicker
B.inputView
mit einer Symbolleiste alsinputAccesotyView
) ersetzen möchten , kann diese Problemumgehung hilfreich sein ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
möchten, setzen Sie es auf YES.Auf diese Weise können Sie auf tippen
UITextField
und die Optionen anzeigen, aus denen Sie auswählenUIPickerView
können. Zu diesem ZeitpunktUITextField
würden Sie tatsächlich nicht auf ein Berührungsereignis reagieren (dies schließt Berühren und Halten zum Ausschneiden, Kopieren und Einfügen ein). Sie müssen jedoch daran denken, es beim Schließen wieder auf YES zu setzen, könnenUIPickerView
jedoch nicht mehr auf Ihr zugreifenUIPickerView
.Der einzige Moment, in dem dies fehlschlägt, ist, wenn der Benutzer zunächst auf die Taste tippt und sie gedrückt hält
UITextView
. Dann wird zum ersten Mal das Ausschneiden, Kopieren und Einfügen angezeigt. Aus diesem Grund sollten Sie Ihre Eingaben immer validieren. Dies ist die einfachste, die ich mir vorstellen kann. Die andere Möglichkeit bestand darin, einenUILabel
schreibgeschützten Text zu verwenden, aber Sie vermissen eine Menge großartiger Funktionen vonUITextView
.quelle
Unterklasse UITextView - Swift 4.0
quelle
Wenn Sie das Popup für deaktivieren möchten,
UITextField
versuchen Sie dieseUITextFieldDelegate
Methode zum UmschaltenisUserInteractionEnabled
.quelle
Dies kann einfach im Storyboard (Xcode 6) erfolgen. Deaktivieren Sie einfach "Bearbeiten" und "Auswählbar" im Attributinspektor. Sie können weiterhin durch die Textansicht scrollen.
quelle
Das hat bei mir funktioniert. Stellen Sie sicher, dass Sie resignFirstResponder in der Textansicht aufrufen
quelle
Ich bot eine Arbeits Antwort hier zu deaktivieren Textauswahl + Lupe, keeping aktiviert clikable Links Hoffnung , die hilft:
UIUnselectableTextView.m
quelle
Für Swift 3 wurde Folgendes geändert:
quelle
Sie können dies in Ihrem Storyboard beheben, indem Sie die folgenden Kontrollkästchen deaktivieren:
Oder Sie können programmgesteuert wie folgt einstellen:
quelle
Ich habe es getan. Auf meiner habe
UITextView
ich die Option Ausschneiden, Kopieren, Auswählen usw. sehr einfach deaktiviert.Ich platzierte ein
UIView
an der gleichen Stelle, an der ich das platziert hatteUITextView
, aber aufself.view
und fügte einetouchDelegate
Methode wie folgt hinzu:und es hat bei mir funktioniert. Danke dir.
quelle
Schnell
verbunden
quelle
Wenn Sie Ihrer UITextView eine benutzerdefinierte Option hinzufügen, aber die vorhandenen Funktionen deaktivieren möchten, gehen Sie wie folgt in Swift 3 vor :
Um die Funktion zum Kopieren, Einfügen und Ausschneiden zu deaktivieren, erstellen Sie eine Unterklasse und überschreiben Sie Folgendes:
Auf dem ViewController muss Ihr CustomTextView Folgendes hinzufügen, um Ihre Optionen hinzuzufügen:
quelle
Diese Methode deaktiviert das Menü Auswählen, Alle auswählen, Einfügen vollständig. Wenn Sie noch eine andere Aktion erhalten, fügen Sie diese einfach wie unten zur if-Bedingung hinzu.
quelle
Sie können einfach eine Kategorie wie folgt erstellen:
UITextView + Selectable.h
UITextView + Selectable.m
quelle
Unterklassen
UITextView
und Überschreiben- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
sind eine weitere Möglichkeit, unerwünschte Aktionen zu deaktivieren.Verwenden Sie die Klasse des
gestureRecognizer
-Objekts, um zu entscheiden, ob die Aktion hinzugefügt werden soll oder nicht.quelle
(SWIFT) Wenn Sie nur ein einfaches Textfeld ohne Menüoptionen oder Lupe möchten, erstellen Sie eine Unterklasse von UITextField, die false an gestureRecognizerShouldBegin zurückgibt:
Dadurch werden alle Touch-Funktionen im Textfeld umgangen, Sie können jedoch weiterhin die Popup-Tastatur zum Hinzufügen / Entfernen von Zeichen verwenden.
Wenn Sie ein Storyboard verwenden, weisen Sie dem Textfeld einfach die neu erstellte Klasse zu, oder wenn Sie programmgesteuert ein Textfeld erstellen:
quelle
quelle
Swift 3
Dazu müssen Sie Ihre UITextView unterordnen und diese Methode einfügen.
quelle
UITextView verfügt über zwei Eigenschaften, die genau das tun, was Sie benötigen: isSelectable und isEditable .
Wenn Sie isEditable auf false setzen, vermeiden Sie, dass der Benutzer den Text bearbeitet, und wenn Sie isSelectable auf false setzen, vermeiden Sie, dass der Benutzer Text in Ihrer textView auswählt, sodass das Aktionsmenü nicht angezeigt wird.
quelle
Den Referenzcode finden Sie als Referenz:
quelle
Verwenden Sie
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
anstelle vontextFieldShouldBeginEditing
.Erstellen Sie eine neue Klasse mit dem Namen StopPasteAction.swift
Fügen Sie die Klasse neue Klasse mit Ihrem aktuellen TextField hinzu
quelle