การคลิกในฟิลด์ข้อความจะทำให้แป้นพิมพ์ปรากฏขึ้น ฉันจะซ่อนมันได้อย่างไรเมื่อผู้ใช้กดปุ่มส่งคืน
การคลิกในฟิลด์ข้อความจะทำให้แป้นพิมพ์ปรากฏขึ้น ฉันจะซ่อนมันได้อย่างไรเมื่อผู้ใช้กดปุ่มส่งคืน
คำตอบ:
ขั้นแรกให้มอบหมายไฟล์ของคุณให้กับ UITextField
@interface MYLoginViewController () <UITextFieldDelegate>
@end
จากนั้นเพิ่มวิธีนี้ในรหัสของคุณ
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
เพิ่มด้วย self.textField.delegate = self;
ในการviewDidLoad
ประกาศ:
[yourTextField setDelegate:self];
จากนั้นรวมถึงการแทนที่ของวิธีการมอบสิทธิ์:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
setDelegate:
แจ้งเตือน ลืมไปแล้วอย่างแน่นอนและรหัสไม่ได้ทำงานก่อนหน้านี้
ลองนี้ในสวิฟท์ ,
ขั้นตอนที่ 1:กำหนดผู้แทนเป็นของคุณเองtextField
textField.delegate = self
ขั้นตอนที่ 2:เพิ่ม UITextFieldDelegate ด้านล่างประกาศคลาสของคุณ
extension YourClassName: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
ใน swift ทำได้ดังนี้:
ก่อนอื่นให้คุณViewController
ใช้สิ่งนี้UITextFieldDelegate
เช่น
class MyViewController: UIViewController, UITextFieldDelegate {
....
}
ตอนนี้เพิ่มผู้รับมอบสิทธิ์TextField
ในการที่คุณต้องการยกเลิกแป้นพิมพ์เมื่อกลับถูกเคาะในviewDidLoad
วิธีการด้านล่างหรือที่คุณจะเริ่มต้นมัน สำหรับเช่น
override func viewDidLoad() {
super.viewDidLoad()
myTextField.delegate = self
}
ตอนนี้เพิ่มวิธีนี้
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
ลองนี้
[textField setDelegate: self];
จากนั้นในวิธีการมอบหมาย textField
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
กำหนดผู้แทนUITextField
และขี่มากกว่าtextFieldShouldReturn
วิธีในวิธีนั้นเพียงแค่เขียนสองบรรทัดต่อไปนี้:
[textField resignFirstResponder];
return YES;
แค่นั้นแหละ. ก่อนที่จะเขียนโค้ดอย่าลืมตั้งค่า a UITextField
และ set Return key type เป็น "Done" จากหน้าต่างคุณสมบัติ (command + shift + I)
คุณสามารถเชื่อมต่อ "Primary Action Triggered" (คลิกขวาที่ UITextField) ด้วย IBAction และคุณสามารถลาออกจากการตอบกลับครั้งแรก (โดยไม่มีการมอบหมาย) ตัวอย่าง (Swift 4):
@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
sender.resignFirstResponder()
...
}
ตั้งผู้รับมอบสิทธิ์ของUITextField
ในตัวควบคุมมุมมองfield.delegate = self
และจากนั้น:
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)
}
}
หากคุณต้องการซ่อนแป้นพิมพ์สำหรับการใช้แป้นพิมพ์โดยเฉพาะ
[self.view resignFirstResponder];
หากคุณต้องการซ่อนแป้นพิมพ์ใด ๆ จากการใช้มุมมอง[self.view endEditing:true];
[textField resignFirstResponder];
ใช้สิ่งนี้
โอเคฉันคิดว่าสิ่งใหม่อาจทำให้สับสนเล็กน้อย ฉันคิดว่าคำตอบที่ถูกต้องคือการผสมผสานของทั้งหมดข้างต้นอย่างน้อยใน Swift4
สร้างส่วนขยายหรือใช้ ViewController ซึ่งคุณต้องการใช้ แต่ให้แน่ใจว่าได้ใช้ UITextFieldDelegate เพื่อประโยชน์ในการนำมาใช้ใหม่ฉันพบว่าการใช้ส่วนขยายนั้นง่ายกว่า:
extension UIViewController : UITextFieldDelegate {
...
}
แต่ทางเลือกก็ใช้ได้เช่นกัน:
class MyViewController: UIViewController {
...
}
เพิ่มเมธอด textFieldShouldReturn (ขึ้นอยู่กับตัวเลือกก่อนหน้าของคุณทั้งในส่วนขยายหรือใน ViewController ของคุณ)
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
return textField.endEditing(false)
}
ในเมธอด viewDidLoad ของคุณให้ตั้งค่าผู้รับมอบสิทธิ์ของ textfield เป็น self
@IBOutlet weak var myTextField: UITextField!
...
override func viewDidLoad() {
..
myTextField.delegte = self;
..
}
นั่นควรจะเป็นทั้งหมด ตอนนี้เมื่อคุณกดควรจะเรียกว่าreturn
textFieldShouldReturn
กำหนดคลาสนี้จากนั้นตั้งค่าฟิลด์ข้อความของคุณเพื่อใช้คลาสและสิ่งนี้จะทำหน้าที่เป็นคีย์บอร์ดอัตโนมัติทั้งหมดเมื่อกดปุ่มย้อนกลับโดยอัตโนมัติ
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
}
}
จากนั้นสิ่งที่คุณต้องทำในกระดานเรื่องราวจะถูกตั้งค่าให้ใช้คลาส: