The UITextView
's Copy, Cut, Pilih, Pilih Semua fungsi ditampilkan secara default ketika saya menekan ke bawah pada layar. Tapi, dalam proyek saya, UITextField
hanya baca saja. Saya tidak membutuhkan fungsi ini. Tolong beri tahu saya cara menonaktifkan fitur ini.
ios
objective-c
uitextview
Aishwarya
sumber
sumber
Jawaban:
Cara termudah untuk menonaktifkan operasi papan tempel adalah dengan membuat subkelas
UITextView
yang menggantikancanPerformAction:withSender:
metode untuk mengembalikanNO
tindakan yang tidak ingin Anda izinkan:Lihat juga UIResponder
sumber
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { return NO; }
- untuk memblokir semua opsiSubclass UITextView dan timpa canBecomeFirstResponder:
Perhatikan, ini hanya berlaku untuk UITextView yang tidak dapat diedit! Belum mengujinya pada yang dapat diedit ...
sumber
return NO;
pada- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
metode adalah pilihan yang lebih baik.Jika Anda ingin menonaktifkan potong / salin / tempel pada semua
UITextView
aplikasi Anda, Anda dapat menggunakan kategori dengan:Ini menyimpan subclass ... :-)
sumber
UITextView
dari berperilaku seperti yang diharapkan ketika, misalnya, dapat diedit dan disentuh. Ini banyak yang harus dikesampingkancanPerformAction:withSender:
; untuk itulah protokolnya.Ini adalah solusi kerja terbaik untuk saya:
dari: https://stackoverflow.com/a/5704584/1293949
sumber
Jawaban @rpetrich berhasil untuk saya. Saya memposting kode yang diperluas seandainya itu menghemat waktu seseorang.
Dalam kasus saya, saya tidak menginginkan popup apa pun, tetapi saya ingin UITextField dapat menjadi penanggap pertama.
Sayangnya, Anda masih mendapatkan munculan kaca pembesar saat mengetuk dan menahan bidang teks.
Cepat 4
sumber
Jika Anda tidak memerlukan UITextView untuk menggulir, solusi paling sederhana yang tidak melibatkan sub-pengelompokan adalah dengan menonaktifkan interaksi pengguna untuk tampilan teks:
sumber
Cara termudah adalah membuat subclass UITextView yang menggantikan canPerformAction: withSender:
sumber
Ketika saya mengembalikan NO di canPerformAction di iOS 7, saya akan mendapatkan banyak kesalahan seperti ini:
<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.
Solusi saya adalah sebagai berikut:
Triknya adalah menyembunyikan pengontrol menu di siklus berikutnya di antrean utama (tepat setelah ditampilkan).
sumber
Ini adalah cara termudah untuk menonaktifkan seluruh Menu Pilih / Salin / Tempel dalam UITextView
sumber
Sejak iOS 7, ada properti di UITextView:
Ini membuat tampilan tidak mengizinkan pemilihan teks. Bekerja dengan baik untuk saya.
sumber
Jika Anda ingin mengganti keyboard dengan, katakanlah,
UIPicker
sebagaiinputView
(dengan tentu saja toolbar sebagaiinputAccesotyView
), maka solusi ini mungkin membantu ...textFieldShouldBeginEditing:
textField.userInteractionEnabled = NO;
UIPickerView
, setel ke YES.Dengan melakukan ini, Anda akan dapat mengetuk
UITextField
dan menampilkan opsi untuk memilih dariUIPickerView
, pada saat ini AndaUITextField
memang tidak akan bereaksi terhadap peristiwa sentuh apa pun (ini termasuk sentuh dan tahan untuk memotong, menyalin, dan menempel). Namun, Anda harus ingat untuk mengaturnya kembali ke YA ketika Anda menutup Anda,UIPickerView
namun Anda tidak akan dapat mengaksesUIPickerView
lagi.Satu-satunya momen ketika gagal adalah ketika pengguna memulai dengan mengetuk dan menahan
UITextView
, maka Anda akan melihat potong salin dan tempel lagi untuk pertama kalinya. Inilah sebabnya mengapa Anda harus selalu memvalidasi masukan Anda. Ini yang paling mudah yang bisa saya pikirkan. Opsi lainnya adalah menggunakanUILabel
teks untuk baca-saja tetapi Anda kehilangan banyak fungsi hebat dariUITextView
.sumber
Subclass UITextView - swift 4.0
sumber
Jika Anda ingin menonaktifkan popup untuk
UITextField
kemudian cobaUITextFieldDelegate
metode ini untuk beralihisUserInteractionEnabled
.sumber
Ini dapat dilakukan dengan mudah di storyboard (Xcode 6). Hapus centang Editable dan Selectable di Attributes Inspector. Anda masih dapat menggulir tampilan teks.
sumber
Ini berhasil untuk saya. Pastikan Anda memanggil resignFirstResponder di textView
sumber
Saya memberikan jawaban yang berfungsi di sini untuk menonaktifkan pemilihan teks + kaca pembesar, tetap mengaktifkan tautan yang dapat diglik. Harapan yang membantu:
UIUnselectableTextView.m
sumber
Untuk Swift 3 , ini diubah menjadi:
sumber
Anda dapat memperbaikinya di papan cerita Anda dengan menghapus centang pada kotak berikut:
Atau Anda dapat mengatur secara terprogram seperti ini:
sumber
Saya telah selesai melakukannya. Pada
UITextView
opsi saya, saya telah menonaktifkan potong, salin, pilih, dll dengan sangat mudah.Saya menempatkan
UIView
di tempat yang sama di mana saya telah menempatkanUITextView
, tetapiself.view
dan menambahkantouchDelegate
metode sebagai berikut:dan itu berhasil untuk saya. Terima kasih.
sumber
Cepat
Terkait
sumber
Jika Anda ingin menambahkan opsi kustom ke UITextView tetapi menonaktifkan fungsi yang ada, berikut ini cara melakukannya di Swift 3 :
Untuk menonaktifkan fungsi salin, tempel, potong, buat subkelas dan timpa yang berikut ini:
Di ViewController Anda memiliki CustomTextView menambahkan berikut ini untuk menambahkan opsi Anda:
sumber
Metode ini akan menonaktifkan sepenuhnya menu Select, Select All, Paste. Jika Anda masih mendapatkan tindakan lain, maka tambahkan saja ke kondisi if seperti di bawah ini.
sumber
Anda bisa membuat kategori seperti ini:
UITextView + Selectable. H
UITextView + Selectable.m
sumber
Subclassing
UITextView
dan overriding- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
adalah kemungkinan lain untuk menonaktifkan tindakan yang tidak diinginkan.Gunakan kelas
gestureRecognizer
-object untuk memutuskan apakah tindakan harus ditambahkan atau tidak.sumber
(SWIFT) Jika Anda hanya menginginkan bidang teks dasar tanpa opsi menu atau kaca pembesar, buat subkelas UITextField yang mengembalikan false ke gestureRecognizerShouldBegin:
Ini akan melewati semua fungsionalitas sentuh pada bidang teks tetapi tetap memungkinkan Anda menggunakan keyboard popup untuk menambah / menghapus karakter.
Jika Anda menggunakan storyboard, cukup tetapkan kelas yang baru dibuat ke kolom teks atau jika Anda membuat kolom teks secara terprogram:
sumber
sumber
Cepat 3
Untuk melakukan ini, Anda perlu membuat subclass UITextView Anda dan menggunakan metode ini.
sumber
UITextView memiliki dua properti yang akan melakukan apa yang Anda butuhkan: isSelectable dan isEditable .
Setting isEditable to false Anda akan menghindari pengguna untuk mengedit teks dan pengaturan isSelectable to false Anda akan menghindari pengguna untuk memilih teks di dalam textView Anda sehingga ini akan mencegah menu tindakan ditampilkan.
sumber
Silakan temukan kode contoh untuk referensi:
sumber
Gunakan
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { retrun bool }
di tempattextFieldShouldBeginEditing
.Buat kelas baru dengan nama StopPasteAction.swift
Tambahkan kelas kelas baru dengan Anda TextField saat ini
sumber