UITextField - ghi lại sự kiện nút quay lại


101

Làm cách nào để phát hiện khi người dùng nhấn nút bàn phím "quay lại" trong khi chỉnh sửa UITextField? Tôi cần làm điều này để loại bỏ bàn phím khi người dùng nhấn nút "quay lại".

Cảm ơn.

Câu trả lời:


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

Đừng quên đặt đại biểu trong bảng phân cảnh ...

nhập mô tả hình ảnh ở đây


47
Đảm bảo rằng bộ điều khiển chế độ xem của bạn được đặt làm đại biểu của trường văn bản.
zekel

1
Cảm ơn bạn. Đối với tôi, tôi đặt đại biểu qua self.yourTextField.delegate = self;. Thậm chí nhiều trường văn bản cũng hoạt động.
haxpor

@Praxiteles Việc này hiện có thể được thực hiện trong bảng phân cảnh mà không cần ủy quyền, vui lòng kiểm tra câu trả lời bên dưới.
Blake Lockley

51

Ủy quyền là không bắt buộc, đây là một lớp lót:

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

Rất tiếc, bạn không thể trực tiếp thực hiện việc này trong Bảng phân cảnh của mình (bạn không thể kết nối các hành động với điều khiển phát ra chúng trong Bảng phân cảnh), nhưng bạn có thể thực hiện việc này thông qua một hành động trung gian.


1
Tôi chỉ muốn chỉ ra rằng UIControlEventEditingDidEndOnExitsự kiện chỉ được gửi nếu textFieldShouldReturn:phương thức ủy quyền trả về YES (không từ chức trước trường văn bản).
alex-i

Bạn không cần phải triển khai ủy quyền. Nhưng có thể nếu bạn làm bạn phải quay lại YEScho phương pháp này.
mxcl

9

SWIFT 3.0

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

trong hàm enterPressed () đặt tất cả các hành vi mà bạn đang theo đuổi

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

8

Bây giờ bạn có thể làm điều này là bảng phân cảnh bằng cách sử dụng sự kiện đã gửi 'Did End On Exit'.

Trong lớp con bộ điều khiển chế độ xem của bạn:

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

Trong bảng phân cảnh của bạn cho trường văn bản mong muốn:

nhập mô tả hình ảnh ở đây


Đây là câu trả lời chính xác ngay bây giờ.
Psiloc

3

Phiên bản Swift sử dụng UITextFieldDelegate:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    resignFirstResponder()
    return false
}

2

Swift 5

textField.addTarget(textField, action: #selector(resignFirstResponder), for: .editingDidEndOnExit)

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

Khi nhấp vào nút enter thì phương thức ủy quyền này được gọi. Bạn có thể chụp nút trả về từ phương thức ủy quyền này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.