Làm cách nào để ẩn bàn phím khi tôi nhấn phím quay lại trong UITextField?


148

Nhấp vào một trường văn bản làm cho bàn phím xuất hiện. Làm cách nào để ẩn nó khi người dùng nhấn phím quay lại?


13
Điều thú vị về Stack Overflow là NHIỀU câu hỏi đã được trả lời, đặc biệt là những câu hỏi đơn giản. Do đó, xin vui lòng tìm câu trả lời ĐẦU TIÊN, trước khi hỏi. Hãy xem, thật đơn giản: stackoverflow.com/search?q=iphone+
leather + keyboard

Đây là một lớp con của UITextfield tự động thay đổi UIReturnKey theo điều kiện văn bản / chuỗi: github.com/codeinteractiv
Ứng dụng / OBReturnKeyTextField

Câu trả lời:


286

Trước tiên, hãy ủy quyền tệp của bạn cho UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

Sau đó thêm phương thức này vào mã của bạn.

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

Cũng thêm self.textField.delegate = self;


1
Tò mò, tại sao <UITextFieldDelegate> không cần thiết? Thông thường bạn sẽ thấy một cảnh báo trong trường hợp này.
pixelfreak

7
nếu bạn ủy quyền tệp của mình bằng Trình tạo giao diện thì <UITextFieldDelegate> không cần thiết trong tệp .h ..
Saurabh

1
thêm <UITextFieldDelegate> trong tệp .h và đặt đại biểu trong viewdidload [yourTextField setDelegate: self]; sẽ hoàn thành nó
Umit Kaya

@Saurabh Điều gì đặc biệt về bảng phân cảnh đã tạo ra VC?
Paul Brewczynski

62

Trong viewDidLoadtuyên bố:

[yourTextField setDelegate:self];

Sau đó, bao gồm ghi đè của phương thức ủy nhiệm:

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

6
+1 cho setDelegate:lời nhắc. Chắc chắn đã quên và mã không hoạt động trước đây.
piperchester

2
Đây có nên là textField, thay vì yourTextField khi nó được truyền vào không?
Clive Jefferies

là một cách để tuyên bố rằng đại biểu của textField của bạn
oscar castellon

1
<UITextFieldDelegate> phải ở trong tệp .h, nếu không cảnh báo sẽ xuất hiện!
Umit Kaya

22

Hãy thử điều này trong Swift ,

Bước 1: Đặt đại biểu là chính mìnhtextField

textField.delegate = self

Bước 2: Thêm UITextFieldDelegate bên dưới khai báo lớp của bạn,

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

14

Trong swift làm như thế này:
Đầu tiên trong việc bạn ViewControllerthực hiện điều này UITextFieldDelegate Ví dụ.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

Bây giờ thêm một đại biểu vào một TextFieldtrong đó bạn muốn loại bỏ bàn phím khi trả về được gõ theo viewDidLoadphương thức như bên dưới hoặc nơi bạn đang khởi tạo nó. Ví dụ.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

Bây giờ thêm phương pháp này.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
Bước thứ hai không cần thiết nếu bạn đặt đại biểu trong IB.
hris.to 4/1/2016

Xuất hiện (trong các phiên bản hiện tại của Swift) cần có dấu gạch dưới trước "textField:"
Bryce Sandlund

2

Thử cái này,

[textField setDelegate: self];

Sau đó, trong phương thức ủy nhiệm textField

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

đó không phải là cách tốt nhất để làm điều đó
orafaelreis

cần UITextFieldDelegate trong định nghĩa giao diện.
Alp Altunel

@AlpAltunel: Cảm ơn vì nhận xét, Đã 4 năm trở lại.
Vineesh TP

1

thiết lập đại biểu UITextFieldtextFieldShouldReturnphương thức đi xe , trong phương thức đó, chỉ cần viết hai dòng sau:

[textField resignFirstResponder];
return YES;

đó là nó. Trước khi viết mã, đừng quên đặt đại biểu của a UITextFieldvà đặt loại khóa Trả về thành "Xong" từ cửa sổ thuộc tính. (Lệnh + shift + I).


1

Bạn có thể kết nối "Kích hoạt hành động chính" (nhấp chuột phải vào UITextField) với IBAction và bạn có thể từ chức phản hồi đầu tiên (không cần ủy quyền). Ví dụ (Swift 4):

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

Cách ưa thích nếu sử dụng bảng phân cảnh.
lal

1

Swift 4

Đặt đại biểu UITextFieldtrong trình điều khiển xem field.delegate = self, và sau đó:

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)
    }
}

Làm thế nào bạn có thể xử lý việc người dùng muốn 'tab' đến trường văn bản tiếp theo bằng cách nhấn phím quay lại, cho đến lần cuối cùng và sau đó nó sẽ từ chức? Cũng trong SwiftUI.
Tìm hiểu2Code

@ Learn2Code tạo một trình quản lý, thu thập các trường văn bản và chuỗi, cái cuối cùng sẽ kích hoạt chức năng kết thúc.
dimpiax

1

Nếu bạn muốn ẩn bàn phím cho một bàn phím cụ thể, hãy sử dụng [self.view resignFirstResponder]; Nếu bạn muốn ẩn bất kỳ bàn phím nào khỏi chế độ xem, hãy sử dụng[self.view endEditing:true];



0

Ok, tôi nghĩ đối với một người mới có thể hơi khó hiểu. Tôi nghĩ rằng câu trả lời đúng là sự pha trộn của tất cả những điều trên, ít nhất là trong Swift4.

Tạo tiện ích mở rộng hoặc sử dụng ViewContoder mà bạn muốn sử dụng tiện ích này nhưng đảm bảo triển khai UITextFieldDelegate. Vì mục đích sử dụng lại, tôi thấy việc sử dụng tiện ích mở rộng dễ dàng hơn:

extension UIViewController : UITextFieldDelegate {
    ...
}

nhưng thay thế cũng hoạt động:

class MyViewController: UIViewController {
    ...
}

Thêm phương thức textFieldShouldReturn (tùy thuộc vào tùy chọn trước đó của bạn, trong phần mở rộng hoặc trong ViewContoder của bạn)

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

Trong phương thức viewDidLoad của bạn, hãy đặt đại biểu của trường văn bản thành tự

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

Đó nên là tất cả. Bây giờ, khi bạn bấm returncác textFieldShouldReturnnên được gọi.


0

Xác định lớp này và sau đó đặt trường văn bản của bạn để sử dụng lớp và điều này tự động hóa toàn bộ bàn phím ẩn khi nhấn trở lại được nhấn tự động.

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
    }

}

Sau đó, tất cả những gì bạn cần làm trong bảng phân cảnh là đặt các trường để sử dụng lớp:

nhập mô tả hình ảnh ở đâ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.