UITextField - จับภาพเหตุการณ์ปุ่มย้อนกลับ


101

ฉันจะตรวจจับได้อย่างไรเมื่อผู้ใช้กดปุ่มแป้นพิมพ์ "ย้อนกลับ" ขณะแก้ไข UITextField ฉันต้องทำเช่นนี้เพื่อปิดแป้นพิมพ์เมื่อผู้ใช้กดปุ่ม "ย้อนกลับ"

ขอบคุณ.

คำตอบ:


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

อย่าลืมตั้งตัวแทนในสตอรี่บอร์ด ...

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


47
ตรวจสอบให้แน่ใจว่าตัวควบคุมมุมมองของคุณถูกตั้งค่าเป็นผู้รับมอบสิทธิ์ของฟิลด์ข้อความ
zekel

1
ขอบคุณ. สำหรับฉันฉันตั้งค่าผู้รับมอบสิทธิ์ผ่านself.yourTextField.delegate = self;. แม้แต่ช่องข้อความหลายช่องก็ใช้ได้เช่นกัน
haxpor

@Praxiteles ตอนนี้สามารถทำได้ในสตอรี่บอร์ดโดยไม่ต้องมีการมอบหมายโปรดตรวจสอบคำตอบด้านล่าง
Blake Lockley

51

ไม่จำเป็นต้องมีการมอบสิทธิ์นี่คือซับเดียว:

- (void)viewDidLoad {
    [textField addTarget:textField
                  action:@selector(resignFirstResponder)
        forControlEvents:UIControlEventEditingDidEndOnExit];
}

น่าเศร้าที่คุณไม่สามารถทำสิ่งนี้ได้โดยตรงใน Storyboard ของคุณ (คุณไม่สามารถเชื่อมต่อการดำเนินการกับการควบคุมที่ปล่อยออกมาใน Storyboard) แต่คุณสามารถทำได้ผ่านการดำเนินการจากตัวกลาง


1
ฉันแค่อยากจะชี้ให้เห็นว่าUIControlEventEditingDidEndOnExitเหตุการณ์นั้นจะถูกส่งไปก็ต่อเมื่อtextFieldShouldReturn:วิธีการมอบหมายกลับเป็นใช่ (โดยไม่ต้องลาออกจากช่องข้อความก่อน)
alex-i

คุณไม่จำเป็นต้องใช้การมอบสิทธิ์ แต่บางทีถ้าคุณต้องกลับมาYESใช้วิธีนี้
mxcl

10

SWIFT 3.0

override open func viewDidLoad() {
    super.viewDidLoad()    
    textField.addTarget(self, action: #selector(enterPressed), for: .editingDidEndOnExit)
}

ในฟังก์ชัน enterPressed () ใส่พฤติกรรมทั้งหมดที่คุณต้องการ

func enterPressed(){
    //do something with typed text if needed
    textField.resignFirstResponder()
}

8

ตอนนี้คุณสามารถทำได้โดยใช้สตอรีบอร์ดโดยใช้เหตุการณ์ที่ส่ง 'Did End On Exit'

ในคลาสย่อยตัวควบคุมมุมมองของคุณ:

 @IBAction func textFieldDidEndOnExit(textField: UITextField) {
    textField.resignFirstResponder()
}

ในกระดานเรื่องราวของคุณสำหรับช่องข้อความที่ต้องการ:

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




-1
- (BOOL)textFieldShouldReturn:(UITextField *)txtField 
{
[txtField resignFirstResponder];
return NO;
}

เมื่อคลิกที่ปุ่ม Enter จะมีการเรียกวิธีการมอบสิทธิ์นี้คุณสามารถจับปุ่มส่งคืนจากวิธีการมอบหมายนี้

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