Bir metin alanına tıklamak klavyenin görünmesini sağlar. Kullanıcı dönüş tuşuna bastığında nasıl gizlerim?
Bir metin alanına tıklamak klavyenin görünmesini sağlar. Kullanıcı dönüş tuşuna bastığında nasıl gizlerim?
Yanıtlar:
Ö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;
In viewDidLoad
açıklamadan:
[yourTextField setDelegate:self];
Daha sonra, temsilci yönteminin geçersiz kılmasını ekleyin:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
setDelegate:
Hatırlatma için +1 . Kesinlikle unutmuştu ve kod daha önce çalışma değildi.
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
}
}
Hızlı bir şekilde bunu yapın:
Önce ViewController
uygulamanızda UITextFieldDelegate
Örneğin.
class MyViewController: UIViewController, UITextFieldDelegate {
....
}
Şimdi TextField
, viewDidLoad
aş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
}
Bunu dene,
[textField setDelegate: self];
Sonra textField delege yönteminde
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
Bu yöntemde delege UITextField
ve over over textFieldShouldReturn
yö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 UITextField
ayarlamayı ve Özellikler penceresinden Return tuşu türünü "Bitti" olarak ayarlamayı unutmayın (command + shift + I).
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()
...
}
UITextField
Görünüm denetleyicisinin temsilcisini ayarlayın field.delegate = self
ve 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)
}
}
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];
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.return
textFieldShouldReturn
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: