UITextFieldShouldReturn 不适用于我的代码

UITextFieldShouldReturn does not work with my code

我搜索了整个互联网并尝试了不同的方法来实现 UITextFieldShouldReturn,但是当我 运行 它在模拟器中时它就是不起作用。

我想做的是当用户单击键盘上的下一步按钮时,从第一个文本字段 (emailTextField) 移动到第二个文本字段 (nameTextField)。第二个文本字段的键盘也是如此,当用户单击最后一个文本字段 ( numberTextField ) 上的完成按钮时关闭键盘。

这是我的代码,有人可以帮我吗?

#import "ViewController.h"

@interface ViewController () <UITextFieldDelegate>

@end

@implementation ViewController 

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.emailTextField.placeholder = @"Your Pitt Email(optional)";
self.nameTextField.placeholder = @"Lost ID Name";
self.numberTextField.placeholder = @"Lost ID Series Number(optional)";

[self.emailTextField.delegate  self];
[self.nameTextField.delegate self];
[self.numberTextField.delegate  self];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

//release delegate
-(void)dealloc{
self.emailTextField.delegate = nil;
self.nameTextField.delegate = nil;
self.numberTextField.delegate = nil;
}

//dismiss keyboard when it's called
-(void)dismissKeyboard{
[self.emailTextField resignFirstResponder];
[self.nameTextField resignFirstResponder];
[self.numberTextField resignFirstResponder];
}

//when a textfield begins editing, this will happen
-(void)textFieldDidBeginEditing:(UITextField *)textField{
if(textField == self.emailTextField){
    textField.placeholder = @"";
}else if(textField == self.nameTextField){
    textField.placeholder = @"";
}else{
    textField.placeholder = @"";
}
}

//when a textfield ends editing, this will happen
-(void)textFieldDidEndEditing:(UITextField *)textField{
if(textField == self.emailTextField){
    textField.placeholder = @"Your Pitt Email(optional)";
    [self textFieldShouldReturn:self.emailTextField];
}else if(textField == self.nameTextField){
    textField.placeholder = @"Lost ID Name";
    [self textFieldShouldReturn:self.nameTextField];
}else{
    textField.placeholder = @"Lost ID Series Number(Optional)";
    [self textFieldShouldReturn:self.numberTextField];
}
}

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

//when confirm is pressed
- (IBAction)confirmButton:(id)sender {
[self dismissKeyboard];
}
@end`

您始终可以使用库来完成您需要做的事情!! 使用这个库:tpAvoidKeyboard

阅读如何使用它,然后您将转到所有下一个按钮并单击文本字段外部以关闭键盘,然后单击最后一个文本字段上的完成按钮以关闭键盘,所有这些功能都已实现

试试这个代码片段。在这里我只带两个 UITextFields.

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{

    if (textField==_txtEmail)
    {
        [_txtEmail resignFirstResponder];
        [_txtPassword becomeFirstResponder];
    }
    else if (textField==_txtPassword)
    {
        [_txtPassword resignFirstResponder];
    }
    return YES;
}

改变

[self.emailTextField.delegate  self];

self.emailTextField.delegate = self;

同时从 dealloc 中删除这些委托。你可以把它们从 viewDidDisappear

首先你需要设置委托权限。然后你需要给你的下一个文本字段 becomeNextResponder 调用,最好在 shouldReturn 委托方法中完成。 在您的 viewDidLoad 方法中,粘贴此内容。

self.emailTextField.tag = 2000;
self.nameTextField.tag = 3000;
self.numberTextField.tag = 4000;

现在像这样编辑您的 textFieldShouldReturn 方法:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
if(textfield.tag<4000)
{
   UITextField *nextTextField = (UITextField *)[self.view viewWithTag:textField.tag+1000];
[nextTextField becomeFirstResponder];
}
return YES;
}

此功能足以 return 来自文本字段的键盘。

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

您的这 3 条线路不工作。

[self.emailTextField.delegate  self];
[self.nameTextField.delegate self];
[self.numberTextField.delegate  self];

如果您使用的是故事板,请将文本字段的委托与视图连接起来。

你可以使用这个code.It对我有用..

-(void)tool{

UIToolbar *toolbar = [[UIToolbar alloc] init];
[toolbar setBarStyle:UIBarStyleBlackTranslucent];
[toolbar sizeToFit];

UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];
[doneButton setTintColor:[UIColor whiteColor]];

UIBarButtonItem *Next = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(Nextbutton)];
[Next setTintColor:[UIColor whiteColor]];

NSArray *itemsArray = [NSArray arrayWithObjects:Next,flexButton,doneButton,nil];
[toolbar setItems:itemsArray];


[FirstNameTextField setInputAccessoryView:toolbar];
[LastNameTextfield setInputAccessoryView:toolbar];
[EmailAddressTextField setInputAccessoryView:toolbar];
[PasswordTextfield setInputAccessoryView:toolbar];
[ConfirmPasswordTextfield setInputAccessoryView:toolbar];}

-(void)Nextbutton{
if ([FirstNameTextField isFirstResponder])
{
    [LastNameTextfield becomeFirstResponder];
}
else if ([LastNameTextfield isFirstResponder])
{
    [EmailAddressTextField becomeFirstResponder];
}
else if ([EmailAddressTextField isFirstResponder])
{
    [PasswordTextfield becomeFirstResponder];
}
else if ([PasswordTextfield isFirstResponder])
{
    [ConfirmPasswordTextfield becomeFirstResponder];
}
else if ([ConfirmPasswordTextfield isFirstResponder])
{
    [ConfirmPasswordTextfield resignFirstResponder];
}}

-(void)resignKeyboard{
[FirstNameTextField resignFirstResponder];
[EmailAddressTextField resignFirstResponder];
[LastNameTextfield resignFirstResponder];
[PasswordTextfield resignFirstResponder];
[ConfirmPasswordTextfield resignFirstResponder];}