【问题标题】:UITextFieldShouldReturn does not work with my codeTextFieldShouldReturn 不适用于我的代码
【发布时间】:2016-01-01 18:33:18
【问题描述】:

我已经搜索了整个互联网并尝试了不同的方法来实现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`

【问题讨论】:

  • 你为什么玩占位符?当您开始输入时它会自动消失...

标签: ios objective-c xcode keyboard uitextfield


【解决方案1】:

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

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

【讨论】:

  • 您想要完成的是从一个文本字段到另一个文本字段的键盘上的下一个按钮,并且您希望能够在最后一个文本字段上关闭键盘,对吗?那么这个库应该对你有用,我以前用过它,这太棒了@FahimParkar
【解决方案2】:

试试这个代码 sn-p。这里我只带两个 UITextFields。

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

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

【讨论】:

    【解决方案3】:

    改变

    [self.emailTextField.delegate  self];
    

    到

    self.emailTextField.delegate = self;
    

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

    【讨论】:

    • 成功了!太感谢了!你能告诉我有什么区别吗?为什么点有效而方括号无效?
    【解决方案4】:

    首先你需要设置代理权限。然后您需要为您的下一个文本字段提供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;
    }
    

    【讨论】:

      【解决方案5】:

      这个函数足以从文本字段返回键盘。

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

      你的这 3 行不工作。

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

      如果您使用故事板,请将文本字段的代表与视图连接。

      【讨论】:

        【解决方案6】:

        您可以使用此代码。它对我有用..

        -(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];}
        

        【讨论】:

          猜你喜欢
          • 2015-12-10
          • 2014-05-25
          • 2020-11-27
          • 1970-01-01
          • 2017-10-29
          • 1970-01-01
          • 1970-01-01
          • 2013-03-01
          • 2021-10-09
          相关资源
          最近更新 更多