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?
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?
Câu trả lời:
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;
Trong viewDidLoad
tuyê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;
}
setDelegate:
lời nhắc. Chắc chắn đã quên và mã không hoạt động trước đây.
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
}
}
Trong swift làm như thế này:
Đầu tiên trong việc bạn ViewController
thự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 TextField
trong đó bạn muốn loại bỏ bàn phím khi trả về được gõ theo viewDidLoad
phươ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
}
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;
}
thiết lập đại biểu UITextField
và textFieldShouldReturn
phươ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 UITextField
và đặt loại khóa Trả về thành "Xong" từ cửa sổ thuộc tính. (Lệnh + shift + I).
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()
...
}
Đặt đại biểu UITextField
trong 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)
}
}
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];
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 return
các textFieldShouldReturn
nên được gọi.
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: