ฉันจะซ่อนแป้นพิมพ์ได้อย่างไรเมื่อฉันกดปุ่มย้อนกลับใน UITextField


148

การคลิกในฟิลด์ข้อความจะทำให้แป้นพิมพ์ปรากฏขึ้น ฉันจะซ่อนมันได้อย่างไรเมื่อผู้ใช้กดปุ่มส่งคืน


13
สิ่งที่ดีเกี่ยวกับ Stack Overflow คือคำถามมากมายได้รับคำตอบแล้วโดยเฉพาะอย่างยิ่งคำถามธรรมดา ดังนั้นโปรดมองหาคำตอบแรกก่อนถาม ดูง่าย ๆ : stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

นี่คือคลาสย่อยของ UITextfield ที่เปลี่ยน UIReturnKey แบบไดนามิกตามเงื่อนไขข้อความ / สตริง: github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

คำตอบ:


286

ขั้นแรกให้มอบหมายไฟล์ของคุณให้กับ UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

จากนั้นเพิ่มวิธีนี้ในรหัสของคุณ

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

เพิ่มด้วย self.textField.delegate = self;


1
อยากรู้ว่าทำไม <UITextFieldDelegate> ถึงไม่จำเป็น โดยปกติคุณจะเห็นคำเตือนในกรณีนี้
pixelfreak

7
ถ้าคุณทำให้ตัวแทนไฟล์ของคุณโดยใช้เครื่องมือสร้างอินเตอร์เฟส <UITextFieldDelegate> นั้นไม่จำเป็นต้องใช้ในไฟล์. h ..
Saurabh

1
การเพิ่ม <UITextFieldDelegate> ในไฟล์. h และตั้งผู้รับมอบสิทธิ์ใน viewdidload [yourTextField setDelegate: self]; จะทำให้เสร็จ!
Umit Kaya

@Saurabh มีอะไรพิเศษเกี่ยวกับกระดานเรื่องราวที่สร้าง VC
Paul Brewczynski

62

ในการviewDidLoadประกาศ:

[yourTextField setDelegate:self];

จากนั้นรวมถึงการแทนที่ของวิธีการมอบสิทธิ์:

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

6
+1 สำหรับการsetDelegate:แจ้งเตือน ลืมไปแล้วอย่างแน่นอนและรหัสไม่ได้ทำงานก่อนหน้านี้
piperchester

2
นี่ไม่ควรเป็นฟิลด์ข้อความแทนที่จะเป็นฟิลด์ข้อความของคุณเนื่องจากมีการส่งผ่านหรือไม่
ไคลฟ์ Jefferies

เป็นวิธีการบอกว่าประกาศผู้ได้รับมอบหมายสนามข้อความของคุณ
oscar castellon

1
<UITextFieldDelegate> ควรอยู่ในไฟล์. h มิฉะนั้นจะมีคำเตือนปรากฏขึ้น!
Umit Kaya

22

ลองนี้ในสวิฟท์ ,

ขั้นตอนที่ 1:กำหนดผู้แทนเป็นของคุณเองtextField

textField.delegate = self

ขั้นตอนที่ 2:เพิ่ม UITextFieldDelegate ด้านล่างประกาศคลาสของคุณ

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

14

ใน 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
}

1
ขั้นตอนที่สองไม่จำเป็นถ้าคุณตั้งตัวแทนใน IB
hris.to

ปรากฏขึ้น (ใน Swift เวอร์ชันปัจจุบัน) ควรมีขีดล่างก่อน "textField:"
Bryce Sandlund

2

ลองนี้

[textField setDelegate: self];

จากนั้นในวิธีการมอบหมาย textField

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

นั่นไม่ใช่วิธีปฏิบัติที่ดีที่สุดในการทำเช่นนั้น
orafaelreis

ต้องการ UITextFieldDelegate ในนิยามอินเตอร์เฟส
Alp Altunel

@AlpAltunel: ขอบคุณสำหรับความคิดเห็นมันเป็นเวลา 4 ปี
Vineesh TP

1

กำหนดผู้แทนUITextFieldและขี่มากกว่าtextFieldShouldReturnวิธีในวิธีนั้นเพียงแค่เขียนสองบรรทัดต่อไปนี้:

[textField resignFirstResponder];
return YES;

แค่นั้นแหละ. ก่อนที่จะเขียนโค้ดอย่าลืมตั้งค่า a UITextFieldและ set Return key type เป็น "Done" จากหน้าต่างคุณสมบัติ (command + shift + I)


1

คุณสามารถเชื่อมต่อ "Primary Action Triggered" (คลิกขวาที่ UITextField) ด้วย IBAction และคุณสามารถลาออกจากการตอบกลับครั้งแรก (โดยไม่มีการมอบหมาย) ตัวอย่าง (Swift 4):

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

วิธีที่ต้องการถ้าใช้กระดานเรื่องราว
lal

1

สวิฟต์ 4

ตั้งผู้รับมอบสิทธิ์ของ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)
    }
}

คุณจะจัดการกับความต้องการของผู้ใช้ในการ 'แท็บ' ไปยังช่องข้อความถัดไปได้อย่างไรโดยการกดปุ่มย้อนกลับจนกว่าจะถึงวันสุดท้ายแล้วมันจะลาออก? นอกจากนี้ใน SwiftUI
Learn2Code

@ Learn2Code สร้างผู้จัดการรวบรวม textfields และ chain คนสุดท้ายจะทริกเกอร์ฟังก์ชั่นเสร็จสิ้น
dimpiax

1

หากคุณต้องการซ่อนแป้นพิมพ์สำหรับการใช้แป้นพิมพ์โดยเฉพาะ [self.view resignFirstResponder]; หากคุณต้องการซ่อนแป้นพิมพ์ใด ๆ จากการใช้มุมมอง[self.view endEditing:true];



0

โอเคฉันคิดว่าสิ่งใหม่อาจทำให้สับสนเล็กน้อย ฉันคิดว่าคำตอบที่ถูกต้องคือการผสมผสานของทั้งหมดข้างต้นอย่างน้อยใน 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;
    ..
}

นั่นควรจะเป็นทั้งหมด ตอนนี้เมื่อคุณกดควรจะเรียกว่าreturntextFieldShouldReturn


0

กำหนดคลาสนี้จากนั้นตั้งค่าฟิลด์ข้อความของคุณเพื่อใช้คลาสและสิ่งนี้จะทำหน้าที่เป็นคีย์บอร์ดอัตโนมัติทั้งหมดเมื่อกดปุ่มย้อนกลับโดยอัตโนมัติ

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
    }

}

จากนั้นสิ่งที่คุณต้องทำในกระดานเรื่องราวจะถูกตั้งค่าให้ใช้คลาส:

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.