Funkcje UITextView
Kopiuj, Wytnij, Wybierz, Zaznacz wszystko są wyświetlane domyślnie po naciśnięciu ekranu. Ale w moim projekcie UITextField
jest tylko do odczytu. Nie potrzebuję tej funkcjonalności. Powiedz mi, jak wyłączyć tę funkcję.
ios
objective-c
uitextview
Aishwarya
źródło
źródło
Odpowiedzi:
Najłatwiejszym sposobem wyłączenia operacji wklejania jest utworzenie podklasy,
UITextView
która przesłaniacanPerformAction:withSender:
metodę zwracaniaNO
działań, na które nie chcesz zezwolić:Zobacz także UIResponder
źródło
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- zablokować wszystkie opcjePodklasa UITextView i nadpisanie canBecomeFirstResponder:
Zwróć uwagę, że dotyczy to tylko nieedytowalnych UITextViews! Nie testowałem tego na edytowalnych ...
źródło
return NO;
o- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
metodzie jest lepszym rozwiązaniem.Jeśli chcesz wyłączyć wycinanie / kopiowanie / wklejanie we wszystkich
UITextView
swoich aplikacjach, możesz użyć kategorii z:Zapisuje podklasę ... :-)
źródło
UITextView
zachowywaniu się zgodnie z oczekiwaniami, na przykład, gdy można go edytować i można go dotknąć. To dużo do przesłonięciacanPerformAction:withSender:
; do tego służy protokół.To było dla mnie najlepsze działające rozwiązanie:
z: https://stackoverflow.com/a/5704584/1293949
źródło
@rpetrich answer zadziałało dla mnie. Wysyłam rozszerzony kod na wypadek, gdyby zaoszczędził komuś trochę czasu.
W moim przypadku nie chcę żadnego wyskakującego okienka, ale chcę, aby UITextField mógł zostać pierwszym respondentem.
Niestety, po dotknięciu i przytrzymaniu pola tekstowego nadal pojawia się wyskakujące okienko lupy.
Szybki 4
źródło
Jeśli nie potrzebujesz UITextView do przewijania, najprostszym rozwiązaniem, które nie obejmuje podklas, jest po prostu wyłączenie interakcji użytkownika dla widoku tekstu:
źródło
Najłatwiejszym sposobem jest utworzenie podklasy UITextView, która przesłania canPerformAction: withSender:
źródło
Kiedy zwrócę NIE w canPerformAction na iOS 7, otrzymam wiele błędów takich jak ten:
<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.
Moje rozwiązanie jest następujące:
Sztuczka polega na tym, aby w kolejnym cyklu w głównej kolejce ukryć kontroler menu (tuż po jego wyświetleniu).
źródło
Jest to najłatwiejszy sposób na wyłączenie całego menu Wybierz / Kopiuj / Wklej w UITextView
źródło
Od iOS 7 istnieje właściwość na UITextView:
Dzięki temu widok nie zezwala na zaznaczanie tekstu. U mnie działa świetnie.
źródło
Jeśli chcesz zastąpić klawiaturę, powiedzmy,
UIPicker
jakoinputView
(oczywiście z paskiem narzędzi jakoinputAccesotyView
), to obejście może pomóc ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
, ustaw go na TAK.W ten sposób będziesz mógł dotknąć
UITextField
i wyświetlić opcje do wyboruUIPickerView
, w tym momencieUITextField
rzeczywiście nie zareagowałbyś na żadne zdarzenie dotykowe (obejmuje to dotknięcie i przytrzymanie do wycinania, kopiowania i wklejania). Musisz jednak pamiętać, aby ustawić go z powrotem na TAK podczas zamykania konta,UIPickerView
ale nie będziesz mieć dostępu do swojegoUIPickerView
ponownie.Jedynym momentem, w którym to się nie powiedzie, jest to, że użytkownik zaczyna od dotknięcia i przytrzymania przycisku
UITextView
, a następnie po raz pierwszy zobaczysz wycinanie, kopiowanie i wklejanie. Dlatego zawsze należy sprawdzać poprawność wprowadzonych danych. To najłatwiejsza rzecz, jaką przychodzi mi do głowy. Inną opcją było użycieUILabel
tekstu tylko do odczytu, ale brakuje Ci wielu wspaniałych funkcji zUITextView
.źródło
Podklasa UITextView - swift 4.0
źródło
Jeśli chcesz wyłączyć wyskakujące okienko,
UITextField
wypróbuj tęUITextFieldDelegate
metodę, aby przełączyćisUserInteractionEnabled
.źródło
Można to łatwo zrobić w scenorysie (Xcode 6). Po prostu odznacz opcję Edytowalne i Wybieralne w Inspektorze atrybutów. Nadal możesz przewijać widok tekstu.
źródło
To zadziałało dla mnie. Upewnij się, że dzwonisz do resignFirstResponder w textView
źródło
Podałem tutaj działającą odpowiedź , aby wyłączyć zaznaczanie tekstu + lupę, zachowując włączone klikalne linki. Mam nadzieję, że to pomoże:
UIUnselectableTextView.m
źródło
W przypadku Swift 3 zmieniono na:
źródło
Możesz to naprawić w swoim storyboardzie, odznaczając te pola:
Lub możesz ustawić programowo w następujący sposób:
źródło
Zrobiłem to. Na moim
UITextView
bardzo łatwo wyłączyłem opcję wycinania, kopiowania, zaznaczania itp.Umieściłem
UIView
w tym samym miejscu, w którym umieściłemUITextView
, ale naself.view
i dodałemtouchDelegate
metodę w następujący sposób:i to zadziałało dla mnie. Dziękuję Ci.
źródło
Szybki
Związane z
źródło
Jeśli chcesz dodać niestandardową opcję do swojego UITextView, ale wyłączyć istniejące funkcje, oto jak to zrobić w Swift 3 :
Aby wyłączyć kopiowanie, wklejanie, wycinanie, utwórz podklasę i nadpisz następujące elementy:
W kontrolerze ViewController masz swój CustomTextView dodaj następujące elementy, aby dodać opcje:
źródło
Ta metoda całkowicie wyłączy menu Wybierz, Zaznacz wszystko, Wklej. Jeśli nadal otrzymujesz inną akcję, po prostu dodaj ją do warunku if, jak poniżej.
źródło
Możesz po prostu utworzyć taką kategorię:
UITextView + Selectable. H
UITextView + Selectable. M
źródło
Podklasy
UITextView
i nadpisywanie- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
to kolejna możliwość wyłączenia niechcianych działań.Użyj klasy obiektu
gestureRecognizer
-object, aby zdecydować, czy akcja powinna zostać dodana, czy nie.źródło
(SWIFT) Jeśli chcesz mieć tylko podstawowe pole tekstowe bez opcji menu ani szkła powiększającego, utwórz podklasę UITextField zwracającą false do gestRecognizerShouldBegin:
Spowoduje to pominięcie wszystkich funkcji dotykowych w polu tekstowym, ale nadal umożliwi używanie wyskakującej klawiatury do dodawania / usuwania znaków.
Jeśli używasz scenorysu, po prostu przypisz nowo utworzoną klasę do pola tekstowego lub jeśli programowo tworzysz pole tekstowe:
źródło
źródło
Szybki 3
Aby to zrobić, musisz utworzyć podklasę swojego UITextView i umieścić tę metodę.
źródło
UITextView ma dwie właściwości, które zrobią to, czego potrzebujesz: isSelectable i isEditable .
Ustawienie isEditable na false pozwoli uniknąć użytkownikowi edycji tekstu, a ustawienie isSelectable na false pozwoli uniknąć użytkownikowi wybierania tekstu w Twoim textView, co zapobiegnie wyświetlaniu menu akcji.
źródło
Proszę znaleźć przykładowy kod w celach informacyjnych:
źródło
Użyj
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
zamiasttextFieldShouldBeginEditing
.Utwórz nową klasę o nazwie StopPasteAction.swift
Dodaj klasę nową klasę z bieżącym TextField
źródło