Soru Klavye içermeyen UITextField işlevselliği


Metin girmek için özel bir arayüze sahip bir uygulama yapıyorum ve görüntüleme için bir UILabel kullanıyordum. Daha sonra kullanıcının metni kopyalayıp yapıştırabilmesi için gerekli hale geldi, böylece bir UITextField ile gittim.

Sorun şu ki, UITextField'ın seçim, kopyalama, yapıştırma vb. İzin vermek için nasıl kullanılacağını anlayamıyorum ama alan seçildiğinde klavyenin görüntülenmesini istemiyorum.

Buna benzer çok sayıda yazı okudum ama hiçbiri tam olarak aynı şeyi sormuyor ve çözümlerin hiçbiri benim için işe yaramıyor. Alanın düzenlenemez hale getirilmesini denedim, bu da klavyenin gelmesini engelliyor, ancak kopyalama ve yapıştırma işlemlerine de izin vermiyor. Ayrıca, UITextField alt sınıflarını öneren yorumları okudum, fakat okuduğum hiçbiri somut örnekler vermedi.

İstediğim şey basitçe yapılabilir mi, yoksa klavye veya başka seçenekler için özel bir görünüm oluşturma yoluna gitmem gerekiyor mu?

Teşekkürler, Andrew

Çözüm:

Sonunda, yığın akışında bir başka benzer (ama tam olarak değil) soru keşfettim ve bir cevap benim sorunuma bir çözüm verdi. Bu konuda gitmek için yol klavyenin bir kukla Görünüm görüntülemek için basitçe, ve her şey gerektiği gibi çalışır.

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

UITextField ve UITextView için çalışır ve düzenlenebilir olarak ayarlanması gerekir.


18
2018-01-09 00:13


Menşei




Cevaplar:


Çözüm:

Sonunda, yığın akışında bir başka benzer (ama tam olarak değil) soru keşfettim ve bir cevap benim sorunuma bir çözüm verdi. Bu konuda gitmek için yol klavyenin bir kukla Görünüm görüntülemek için basitçe, ve her şey gerektiği gibi çalışır.

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

İçin çalışır UITextField ve UITextView ve düzenlenebilir olarak ayarlanması gerekiyor.


24
2018-05-07 20:32



Bunu iOS 7'de yaparsanız, bu soru olarak beyaz bir çizgi alırsınız. stackoverflow.com/questions/20946524/... .Bunun için çözümü biliyor musunuz? - deltaaruna
Birisi bu soruyu cevapladı, 1 piksel rektinin problem olduğunu ve bunun çözülmesini önerdiğini düşünüyor: CGRectMake (0, 0, 0, 0). - Andrew Hoyer
U sıfır çerçeve ile görünüm oluşturmak için [UIView new] kullanabilir. - Dren


Yazarın kodu ...

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

('VIN' UITextField değişkenidir ve bu kod viewDidLoad gibi bir yere yerleştirilir)

... iPhone / iPad açılır klavyesinin görüntülenmesini engellemek için çalışıyor.

HOWEVER, bu sadece bir klavye arayüzünün 'ekran' kısmı. Apple'ın 30 iğneli veya zilyonlu Bluetooth özellikli klavyelere takılan fiziksel iPhone / iPad klavyesi (hatta simülatörlü Mac klavyesini kullanarak) gibi harici bir klavyeniz varsa, kullanıcı yine de OLMADAN alana yazabilir. Klavye açılır penceresini gösterir.

Ayrıca, hiç klavye açılmamış olsa bile, kullanıcı, alana çift dokunarak ve PASTE (PASTE) seçerek hala macun tahtasından PASTE (PASTE) yapabilir.

Aşağıdaki EK kodu, bu klavyenin kullanılmasını önler ve PASTE'yi de engeller:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"myXViewController shouldChangeCharactersInRange");
    return FALSE;
}

... ve hala seçime izin verir, ancak alandaki metni düzenlemez.


9
2018-02-04 08:17



Harici klavye hakkında iyi bir nokta - kesinlikle bazı durumlarda bir göz. Yapıştır işlevine gelince, bu sorunun tam anlamıydı - klavyeyi gizlemek ve hala kopyalama / yapıştırma işlevlerine izin vermek. - Andrew Hoyer
İçin teşekkürler, 'VIN' UITextField değişkenidir ve bu kod viewDidLoad gibi bir yere yerleştirilir)!! - rptwsthi


Bir UITextView yapın ve UITextView öğesini düzenlenemez hale getirin. Bu hala kopyalamaya izin verecek.

DÜZENLEME: Evet, kötü olan kısmı unuttum ... Temelde yaptığınız şey kaydırılabilir bir etiket yapmaktı.

Klavyesiz tüm işlevselliği istiyorsanız, düzenlenebilir hale getirmeniz ve UITextFieldDelegate'in düzenini düzenlemeniz gerekir. -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField için return NO. Bu, klavyenin gelmesini engelleyecektir.


1
2018-01-09 00:16



Teşekkürler. Bu hile yaptı. Çok fazla arama yaptıktan sonra ve UITextView'ın daha iyi olacağını gösteren hiçbir şeyden çok memnun kaldım. - Andrew Hoyer
Bunu ilk uygularken, iyi olduğunu düşündüm. Şimdi, yine baktığımda, sadece kopyalayabiliyorum. Yapıştırmaya izin verilmez, muhtemelen bir düzenleme olduğu için. Başka düşünceler var mı? - Andrew Hoyer
Yukarıda düzenlenmiş ... - DGund
Bu işi hala yapamadım. UITextViewDelegate's textViewShouldBeginEditing ve UITextFieldDelegate's textFieldShouldBeginEditing ile UITextField ile bir UITextView yapmayı denedim. Her iki durumda da, geri dönüş NO kullanıldığında, sadece klavyeyi değil tüm düzenleme işlevlerini engeller. - Andrew Hoyer
Devin, bu konuda yardımcı olmaya zaman ayırdığınız için teşekkürler. Etrafa bakmak ve test etmek için bir grup yaptım ve son çözümüm ilk soruma eklendi. Yardımın için minnettarım. - Andrew Hoyer


Ben kullanıyorum [textfield resignFirstResponder] temsilci yönteminde(void)textFieldDidBeginEditing:(UITextField *)textField bunun gibi:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    if (textField == yourTextField){
      [yourTextfield resignFirstResponder];
    }
}

Yani klavye sadece görünecek zamanınız yok


0
2018-03-07 08:13