Bir UITextField öğesinde dönüş tuşuna bastığımda klavyeyi nasıl gizleyebilirim?


148

Bir metin alanına tıklamak klavyenin görünmesini sağlar. Kullanıcı dönüş tuşuna bastığında nasıl gizlerim?


13
Yığın Taşması ile ilgili güzel şey, ÇOK soruların, özellikle de basit soruların zaten cevaplanmış olmasıdır. Bu nedenle, sormadan önce lütfen İLK cevapları arayın. Bakın, çok basit: stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

Bu, UIRexturnKey'i metin / dize durumuna göre dinamik olarak değiştiren bir UITextfield alt sınıfıdır: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

Yanıtlar:


286

Öncelikle dosyanızı UITextField için temsilci yapın

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Ardından bu yöntemi kodunuza ekleyin.

- (BOOL)textFieldShouldReturn:(UITextField *)textField {        
    [textField resignFirstResponder];
    return YES;
}

Ayrıca ekle self.textField.delegate = self;


1
Merak ediyorum, neden <UITextFieldDelegate> gerekli değil? Genellikle bu durumda bir uyarı görürsünüz.
pixelfreak

7
Arabirim Oluşturucusu'nu kullanarak dosya temsilcinizi yaparsanız .h dosyasında <UITextFieldDelegate> gerekli değildir ..
Saurabh

1
.h dosyasına <UITextFieldDelegate> ekleyerek viewdidload'da delege ayarlayın [yourTextField setDelegate: self]; tamamlayacak!
Ümit Kaya

@Saurabh VC'de oluşturulan hikaye panosunda bu kadar özel olan şey nedir?
Paul Brewczynski

62

In viewDidLoadaçıklamadan:

[yourTextField setDelegate:self];

Daha sonra, temsilci yönteminin geçersiz kılmasını ekleyin:

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

6
setDelegate:Hatırlatma için +1 . Kesinlikle unutmuştu ve kod daha önce çalışma değildi.
piperchester

2
Bu, iletildikçe TextField öğeniz yerine textField olmamalı mı?
Clive Jefferies

metninizin delegesini beyan etmenin bir yoludurField
oscar castellon

1
<UITextFieldDelegate> .h dosyasında olmalıdır, aksi takdirde uyarı görünür!
Ümit Kaya

22

Bunu Swift'te dene ,

1. Adım: Temsilcinizi kendi hesabınızatextField

textField.delegate = self

2. Adım: Bu UITextFieldDelegate'i sınıf bildiriminizin altına ekleyin,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

Hızlı bir şekilde bunu yapın:
Önce ViewControlleruygulamanızda UITextFieldDelegate Örneğin.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Şimdi TextField, viewDidLoadaşağıdaki gibi yöntemde veya başlattığınız yerde dönüşe dokunduğunuzda klavyeyi kapatmak istediğiniz bir temsilci ekleyin . Örneğin.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Şimdi bu yöntemi ekleyin.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
IB'de temsilci seçerseniz ikinci adım gerekli değildir.
16:20

Görünüyor (Swift'in mevcut sürümlerinde) "textField:" dan önce bir alt çizgi olmalıdır
Bryce Sandlund

2

Bunu dene,

[textField setDelegate: self];

Sonra textField delege yönteminde

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

bunu yapmak için en iyi uygulama bu değildir.
orafaelreis

arayüz tanımında UITextFieldDelegate gerekiyor.
Alp Altunel

@AlpAltunel: Yorum için teşekkürler, 4 yıl önceydi.
Vineesh TP

1

Bu yöntemde delege UITextFieldve over over textFieldShouldReturnyöntemini ayarlayın, yalnızca aşağıdaki iki satırı yazın:

[textField resignFirstResponder];
return YES;

bu kadar. Bir kod yazmadan önce bir delege UITextFieldayarlamayı ve Özellikler penceresinden Return tuşu türünü "Bitti" olarak ayarlamayı unutmayın (command + shift + I).


1

IBAction ile "Birincil Eylem Tetiklendi" (UITextField üzerinde sağ tıklama) bağlayabilir ve ilk yanıtlayıcıyı (temsilci olmadan) istifa edebilirsiniz. Örnek (Swift 4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

Film şeridi kullanılıyorsa tercih edilen yol.
lal

1

Hızlı 4

UITextFieldGörünüm denetleyicisinin temsilcisini ayarlayın field.delegate = selfve ardından:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

dönüş tuşuna basarak, sonuncuya kadar kullanıcıların bir sonraki metin alanına 'sekmesini' istemeyi nasıl başardınız? Ayrıca SwiftUI'de.
Learn2Code

@ Learn2Code bir yönetici yapmak, metin alanları ve zincir toplamak, sonuncusu bitiş işlevini tetikleyecektir.
dimpiax

1

Belirli bir klavye kullanımı için klavyeyi [self.view resignFirstResponder]; gizlemek istiyorsanız Herhangi bir klavyeyi görünüm kullanımından gizlemek istiyorsanız[self.view endEditing:true];



0

Tamam, bence acemi şeyler biraz kafa karıştırıcı olabilir. Doğru cevabın en azından Swift4'te yukarıdakilerin bir karışımı olduğunu düşünüyorum.

Bir uzantı oluşturun veya bunu kullanmak istediğiniz ViewController'ı kullanın, ancak UITextFieldDelegate'i uyguladığınızdan emin olun. Yeniden kullanılabilirlik adına bir uzantı kullanmayı daha kolay buldum:

extension UIViewController : UITextFieldDelegate {
    ...
}

ama alternatif de işe yarıyor:

class MyViewController: UIViewController {
    ...
}

TextFieldShouldReturn yöntemini ekleyin (önceki seçeneğe bağlı olarak uzantıda veya ViewController'da)

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

ViewDidLoad yönteminizde, metin alanının temsilcisini kendinize ayarlayın

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Hepsi bu kadar olmalı. Şimdi, bastığınızda çağrılmalıdır.returntextFieldShouldReturn


0

Bu sınıfı tanımlayın ve daha sonra metin alanınızı sınıfı kullanacak şekilde ayarlayın; bu, dönüş otomatik olarak basıldığında tüm gizleme klavyesini otomatik hale getirir.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        textField.resignFirstResponder()
        return true
    }

}

Sonra film şeridinde yapmanız gereken tek şey sınıfı kullanmak için alanları ayarlamaktır:

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.