代码之家  ›  专栏  ›  技术社区  ›  nevan king

iPhone键盘、Done按钮和ResignFirstResponder

  •  50
  • nevan king  · 技术社区  · 15 年前

    这可能是个愚蠢的问题,但我在医生那里找不到答案。弹出键盘上的“完成”按钮是否总是导致键盘消失?我在网上看到很多这样的代码:

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

    当我按下“完成”按钮时,键盘弹出,然后 UITextField 重新安排第一响应者。

    我想按“完成”按钮不会导致 输入框 resignFirstResponder 但这种行为在某个时候发生了变化。

    我正在操作系统3.0-3.1.3上调试

    5 回复  |  直到 6 年前
        1
  •  91
  •   nevan king    15 年前

    我做了一个小测试项目,只使用了一个uitextfield和这个代码

    #import <UIKit/UIKit.h>
    @interface TextFieldTestViewController : UIViewController
    <UITextFieldDelegate>
    {
        UITextField *textField;
    }
    @property (nonatomic, retain) IBOutlet UITextField *textField;
    @end
    
    #import "TextFieldTestViewController.h"
    @implementation TextFieldTestViewController
    @synthesize textField;
    
    - (void)viewDidLoad
    {
        [self.textField setDelegate:self];
        [self.textField setReturnKeyType:UIReturnKeyDone];
        [self.textField addTarget:self
                      action:@selector(textFieldFinished:)
            forControlEvents:UIControlEventEditingDidEndOnExit];
        [super viewDidLoad];
    }
    - (IBAction)textFieldFinished:(id)sender
    {
        // [sender resignFirstResponder];
    }
    
    - (void)dealloc {
        [super dealloc];
    }
    @end
    

    文本字段是未修改的 UITextField 拖到笔尖上,连接出口。
    加载应用程序后,单击文本字段将显示键盘。按“完成”按钮会使文本字段失去焦点并在键盘上显示动画。请注意,Web上的建议总是使用 [sender resignFirstResponder] 但没有它,这是可行的。

        2
  •  15
  •   bickster    10 年前

    在XCODE 5.1中

    启用完成按钮

    • 在情节提要的uitextfield的属性检查器中,找到字段“回车键”并选择“完成”

    按下“完成”时隐藏键盘

    • 在故事板中,使ViewController成为uitextfield的委托
    • 将此方法添加到视图控制器

      -(BOOL)textFieldShouldReturn:(UITextField *)textField
      {
          [textField resignFirstResponder];
          return YES;
      }
      
        3
  •  6
  •   bealex    15 年前

    从文档(任何版本)中:

    这是您的应用程序 解除键盘的责任 在你选择的时候。你 可能会响应而关闭键盘 到特定的用户操作,例如 用户点击中的特定按钮 您的用户界面。你也可以 将文本字段委托配置为 当用户 按下 键盘本身。驳回 键盘,发送 将FirstResponder消息重新发送到 当前是第一个的文本字段 应答者。这样做会导致文本 字段对象结束当前 编辑会话(与代理 反对并隐藏 键盘。

    所以,你必须以某种方式发送ResignFirstResponder。但在处理textfieldShouldRen:message期间,textfield可能会以另一种方式失去焦点。这也会导致键盘消失。

        4
  •  2
  •   Matt mmx    10 年前

    “完成”按钮的一行代码:

    [yourTextField setReturnKeyType:UIReturnKeyDone];
    

    在textfield的valueChanged上添加action方法并添加此行-

    [yourTextField resignFirstResponder];
    
        5
  •  0
  •   EddieG    6 年前

    我用这个方法来改变选择文本字段

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
    
    if ([textField isEqual:self.emailRegisterTextField]) {
    
        [self.usernameRegisterTextField becomeFirstResponder];
    
    } else if ([textField isEqual:self.usernameRegisterTextField]) {
    
        [self.passwordRegisterTextField becomeFirstResponder];
    
    } else {
    
        [textField resignFirstResponder];
    
        // To click button for registration when you clicking button "Done" on the keyboard
        [self createMyAccount:self.registrationButton];
    }
    
    return YES;
    

    }