Làm thế nào để làm cho phím quay lại trên iPhone làm cho bàn phím biến mất?


108

Tôi có hai UITextFields(ví dụ: tên người dùng và mật khẩu) nhưng tôi không thể thoát khỏi bàn phím khi nhấn phím quay lại trên bàn phím. Tôi có thể làm cái này như thế nào?

Câu trả lời:


242

Trước tiên, bạn cần tuân theo UITextFieldDelegateGiao thức trong tệp tiêu đề của View / ViewController như sau:

@interface YourViewController : UIViewController <UITextFieldDelegate>

Sau đó, trong tệp .m của bạn, bạn cần triển khai UITextFieldDelegatephương thức giao thức sau :

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

    return YES;
}

[textField resignFirstResponder]; đảm bảo bàn phím bị loại bỏ.

Đảm bảo rằng bạn đang đặt chế độ xem / bộ điều khiển chế độ xem của mình làm đại biểu của UITextField sau khi bạn nhập trường văn bản vào .m:

yourTextField = [[UITextField alloc] initWithFrame:yourFrame];
//....
//....
//Setting the textField's properties
//....    
//The next line is important!!
yourTextField.delegate = self; //self references the viewcontroller or view your textField is on

7
Bạn cũng có thể triển khai đại biểu trong bảng phân cảnh bằng cách nhấp vào trường văn bản, hiển thị bảng Tiện ích, nhấp vào Trình kiểm tra kết nối, kéo cửa hàng đại biểu vào bộ điều khiển dạng xem.
guptron,

1
Phương thức textFieldShouldReturn của bạn được triển khai ở đâu? Bạn cần đặt lớp đó thành đại biểu của UITextField. Lệnh gọi lại ủy quyền sẽ chỉ kích hoạt từ lớp được thiết lập là đại biểu và nếu lớp đó đã triển khai nó.
Sid

1
Bạn đã đặt MyViewController phù hợp với UITextFieldDelegate trong tiêu đề của nó chưa?
Sid

1
Miễn là myTextField đã được phân bổ chính xác và không phải là con số không. Về mặt kỹ thuật, đó là tốt nếu nó bằng không (không có tai nạn) nhưng sau đó rằng sẽ không làm bất cứ điều gì :)
Sid

1
Và nếu tôi có thể thêm, sẽ không thành vấn đề nếu bạn chỉ đang sử dụng một lớp UITextField bị ghi đè , chẳng hạn như UIFloatLabelTextField, bạn VẪN CẦN yourTextField.delegate = self; !!!
Gellie Ann

19

Triển khai phương thức UITextFieldDelegate như sau:

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


6

UITextFields của bạn phải có một đối tượng ủy quyền (UITextFieldDelegate). Sử dụng mã sau trong đại diện của bạn để làm cho bàn phím biến mất:

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

Nên làm việc cho đến nay ...


Này bạn, tôi đã làm những gì bạn đã nói ở trên nhưng tôi vẫn không thể làm cho bàn phím biến mất. Bạn có bất cứ ý tưởng? Cảm ơn.
K.Honda

Này chris, tất cả đã được sắp xếp rồi. Cảm ơn.
K.Honda

6

Đã làm cho tôi vài thử nghiệm, có cùng một vấn đề, điều này đã làm việc cho tôi:

Kiểm tra chính tả của bạn tại -

(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];

Tôi đã sửa thành textFieldthay vì textfieldviết hoa "F" ... và chơi lô tô !! nó đã làm việc..


4

Khi nhấn phím quay lại, hãy gọi:

[uitextfield resignFirstResponder];

Này Conor, làm thế nào để ứng dụng biết khi nào phím quay lại được nhấn? Cảm ơn.
K.Honda

3

Sau khá nhiều thời gian tìm kiếm thứ gì đó có ý nghĩa, đây là những gì tôi đã tổng hợp lại và nó hoạt động như một cái duyên.

.h

//
//  ViewController.h
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

// Connect your text field to this the below property.
@property (weak, nonatomic) IBOutlet UITextField *theTextField;

@end

.m

//
//  ViewController.m
//  demoKeyboardScrolling
//
//  Created by Chris Cantley on 11/14/13.
//  Copyright (c) 2013 Chris Cantley. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    // _theTextField is the name of the parameter designated in the .h file. 
    _theTextField.returnKeyType = UIReturnKeyDone;
    [_theTextField setDelegate:self];

}

// This part is more dynamic as it closes the keyboard regardless of what text field 
// is being used when pressing return.  
// You might want to control every single text field separately but that isn't 
// what this code do.
-(void)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
}


@end

Hi vọng điêu nay co ich!


3

Đặt Người đại diện của UITextField thành ViewController của bạn, thêm một lối ra tham chiếu giữa Chủ sở hữu tệp và UITextField, sau đó triển khai phương pháp này:

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

3

Thêm lớp này thay vì lớp được xác định trước

class ViewController: UIViewController, UITextFieldDelegate {

Cách xóa bàn phím khi nhấp vào bên ngoài bàn phím

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

và để xóa bàn phím khi nhấn enter

thêm dòng này trong viewDidLoad ()

inputField là tên của textField được sử dụng.

self.inputField.delegate = self

và thêm chức năng này

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

2

Swift 2:

đây là những gì đã làm để làm mọi thứ!

bàn phím chặt chẽ với Donenút hoặc Touch outSide, Nextcho đi để đầu vào tiếp theo.

Đầu tiên Change TextFiled Return KeyĐể Nexttrong kịch bản này.

override func viewDidLoad() {
  txtBillIdentifier.delegate = self
  txtBillIdentifier.tag = 1
  txtPayIdentifier.delegate  = self
  txtPayIdentifier.tag  = 2

  let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
  self.view.addGestureRecognizer(tap)

}

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if(textField.returnKeyType == UIReturnKeyType.Default) {
       if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
           next.becomeFirstResponder()
           return false
       }
   }
   textField.resignFirstResponder()
   return false
}

func onTouchGesture(){
    self.view.endEditing(true)
}

Quả táo không khuyến khích sử dụng thẻ. Bạn có thể sử dụng một IBOutletCollection thay
Antzi

2

Trong thời gian nhanh chóng, bạn nên ủy quyền UITextfieldDelegate , điều quan trọng là đừng quên nó, trong viewController, như:

class MyViewController: UITextfieldDelegate{

     mytextfield.delegate = self

     func textFieldShouldReturn(textField: UITextField) -> Bool {
          textField.resignFirstResponder()
     }
}

0

Bạn có thể thêm một IBAction vào uiTextField (sự kiện xuống hạng là "Did End On Exit") và IBAction có thể được đặt tên là hideKeyboard,

-(IBAction)hideKeyboard:(id)sender
{
    [uitextfield resignFirstResponder];
}

Ngoài ra, bạn có thể áp dụng nó cho các Trường văn bản hoặc các nút khác, ví dụ: bạn có thể thêm một nút ẩn vào dạng xem, khi bạn bấm vào nó để ẩn bàn phím.



0

Nếu bạn muốn biến mất bàn phím khi viết trên văn bản hộp cảnh báo

[[alertController.textFields objectAtIndex:1] resignFirstResponder];
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.