วิธีเพิ่มการดำเนินการกับคีย์ส่งคืน UITextField


93

ฉันมีปุ่มและช่องข้อความในมุมมองของฉัน เมื่อฉันคลิกที่ช่องข้อความแป้นพิมพ์จะปรากฏขึ้นและฉันสามารถเขียนลงในช่องข้อความได้และฉันยังสามารถปิดแป้นพิมพ์ได้โดยคลิกที่ปุ่มโดยเพิ่ม:

[self.inputText resignFirstResponder];

ตอนนี้ฉันต้องการเปิดใช้งานปุ่มย้อนกลับของแป้นพิมพ์ เมื่อฉันจะกดแป้นพิมพ์แป้นพิมพ์จะหายไปและจะมีบางอย่างเกิดขึ้น ฉันจะทำเช่นนี้ได้อย่างไร?


1
อาจซ้ำกันได้: stackoverflow.com/questions/4761648/…
wquist

คำตอบ:


187

ตรวจสอบให้แน่ใจว่า "ตนเอง" สมัครสมาชิกUITextFieldDelegateและเริ่มต้น inputText ด้วย:

self.inputText.delegate = self;

เพิ่มวิธีการต่อไปนี้ใน "self":

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if (textField == self.inputText) {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

หรือใน Swift:

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

12

ด้วยรูปแบบการขยายใน swift 3.0

ขั้นแรกตั้งค่าผู้รับมอบสิทธิ์สำหรับช่องข้อความของคุณ

override func viewDidLoad() {
    super.viewDidLoad()
    self.inputText.delegate = self
}

จากนั้นปฏิบัติตามUITextFieldDelegateในส่วนขยายของตัวควบคุมมุมมองของคุณ

extension YourViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == inputText {
            textField.resignFirstResponder()
            return false
        }
        return true
    }
}

4

ในขณะที่คำตอบอื่น ๆ ทำงานได้อย่างถูกต้องฉันชอบทำสิ่งต่อไปนี้:

ใน viewDidLoad () ให้เพิ่ม

self.textField.addTarget(self, action: #selector(onReturn), for: UIControl.Event.editingDidEndOnExit)

และกำหนดฟังก์ชัน

@IBAction func onReturn() {
    self.textField.resignFirstResponder()
    // do whatever you want...
}

-1

ใช้กลไก Target-Action UIKit สำหรับ UIEvent "primaryActionTriggered" ที่ส่งจาก UITextField เมื่อแตะปุ่มเสร็จสิ้นของแป้นพิมพ์

textField.addTarget(self, action: Selector("actionMethodName"), for: .primaryActionTriggered)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.