Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在按return键时以编程方式关闭键盘iOS_Ios_Keyboard_Uitextfield - Fatal编程技术网

如何在按return键时以编程方式关闭键盘iOS

如何在按return键时以编程方式关闭键盘iOS,ios,keyboard,uitextfield,Ios,Keyboard,Uitextfield,我以编程方式创建了一个UITextField,使UITextField成为viewController的属性。我需要用返回键和触摸屏来关闭键盘。我可以让触摸屏关闭,但按回车键不起作用 我已经了解了如何使用故事板,以及如何直接分配和初始化UITextField对象,而不将其创建为属性。可能做什么 H 添加UITextField的委托方法,如下所示: @interface MyController : UIViewController <UITextFieldDelegate> 首先,

我以编程方式创建了一个
UITextField
,使
UITextField
成为viewController的属性。我需要用返回键和触摸屏来关闭键盘。我可以让触摸屏关闭,但按回车键不起作用

我已经了解了如何使用故事板,以及如何直接分配和初始化
UITextField
对象,而不将其创建为属性。可能做什么

H
添加
UITextField
的委托方法,如下所示:

@interface MyController : UIViewController <UITextFieldDelegate>

首先,您需要在.h文件中添加textfield delegete。如果不申报
(BOOL)textField应返回:(UITextField*)textField
此方法未调用。因此,首先添加委托并将键盘隐藏代码写入该方法

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

试试这个..

试着了解iOS视图层次结构中的第一响应者是什么。当您触摸文本字段内部(或以编程方式将消息传递给文本字段becomeFirstResponder)时,文本字段(或FirstResponder)变为活动状态,它将显示键盘。因此,要将您的文本字段从第一响应者中删除,您应该将消息
resignFirstResponder
传递给它

[textField resignFirstResponder];
要在其返回按钮上隐藏键盘,您应该实现其委托方法
textFieldShouldReturn:
,并传递
resignFirstResponder
消息

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

添加委托:UITextFieldDelegate

@interface ViewController : UIViewController <UITextFieldDelegate>

简单的方法是将
UITextField
的委托连接到self(
self.mytestField.delegate=self
),并使用
[textField resignFirstResponder]关闭方法
textField shouldlreturn
)中的键盘

另一种关闭键盘的方法如下:

目标-C

[self.view endEditing:YES];
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        // no need to cast
        [view resignFirstResponder];
    }
}
Swift:

self.view.endEditing(true)
self.view.endEditing(true)
[self.view endEditing:YES];

放置
[自视图编辑:是]
您希望关闭键盘的位置(按钮事件、触摸事件等)。

以下是我在触摸背景或返回后将其关闭的步骤。我必须在viewDidLoad中添加delegate=self,然后在.m文件中添加delegate方法

.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>


@property (strong, atomic) UITextField *username;

@end

.m
- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor blueColor];
    self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
    self.username.placeholder = @"Enter your username";
    self.username.backgroundColor = [UIColor whiteColor];
    self.username.borderStyle = UITextBorderStyleRoundedRect;
    if (self.username.placeholder != nil) {
        self.username.clearsOnBeginEditing = NO;
    }
    self.username.delegate = self;
    [self.username resignFirstResponder];
    [self.view addSubview:self.username];


}

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


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    return YES;
}



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

@end
.h
#进口
@界面ViewController:UIViewController
@属性(强,原子)UITextField*用户名;
@结束
M
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
self.view.backgroundColor=[UIColor blueColor];
self.username=[[UITextField alloc]initWithFrame:CGRectMake(100,25,80,20)];
self.username.placeholder=@“输入您的用户名”;
self.username.backgroundColor=[UIColor whiteColor];
self.username.borderStyle=UITextBorderStyleRoundedRect;
if(self.username.placeholder!=nil){
self.username.clearsOnBeginEditing=否;
}
self.username.delegate=self;
[self.username辞职FirstResponder];
[self.view addSubview:self.username];
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(BOOL)textField应该开始编辑:(UITextField*)textField
{
返回YES;
}
-(BOOL)textField应返回:(UITextField*)textField
{
[textField resignFirstResponder];
返回YES;
}
@结束

//通过触摸视图中的背景隐藏键盘

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[self view] endEditing:YES];
}

对于
ViewController
中的一组
UITextView
s:

Swift 3.0

for view in view.subviews {
    if view is UITextField {
        view.resignFirstResponder()
    }
}
目标-C

[self.view endEditing:YES];
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        // no need to cast
        [view resignFirstResponder];
    }
}

我知道其他人已经回答了这个问题,但我发现另一篇文章也没有涉及背景事件——tableview或scrollview


以下是我在代码中使用的内容。它就像一个符咒

在yourviewcontroller.h中添加:

@property(非原子)UITapGestureRecognizer*tapRecognizer

现在在.m文件中,将其添加到ViewDidLoad函数:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}
另外,在.m文件中添加此函数:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}

在应用程序委托中,您可以编写

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.window endEditing:YES];
}
用这种方法,你就不会写太多的代码

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
    if ([obj isKindOfClass:[UITextField class]]) {
        [obj resignFirstResponder];
    }
}];
}
当您在屏幕中使用多个文本字段时 使用这种方法,您不必每次都提到textfield,就像

[textField1 resignFirstResponder];
[textField2 resignFirstResponder];

由于标签上只显示iOS i将发布Swift 1.2和iOS 8.4的答案,请将这些添加到视图控制器Swift类中:

// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    self.view.endEditing(true)

}

// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {

    textField.resignFirstResponder()

    return true
}
// MARK: -
//标记:-触摸其他位置时关闭键盘
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
self.view.endEditing(true)
}
//标记:-按return键时关闭键盘
func textField应该返回(textField:UITextField!)->Bool{
textField.resignFirstResponder()辞职
返回真值
}
//标记:-

另外,不要忘记在类声明中添加UITextFieldDelegate,并将文本字段委托设置为self(视图)。

Swift 2:

self.view.endEditing(true)
self.view.endEditing(true)
[self.view endEditing:YES];
这就是我们所做的一切

Done
按钮关闭键盘,或
触摸外部
Next
进入下一个输入

首先将脚本中的文本字段
Return Key
更改为
Next

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)
}

只需在swift中使用此选项即可关闭键盘:

UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
[[UIApplication sharedApplication].keyWindow endEditing:YES];
Swift 3

UIApplication.shared.sendAction(#selector(UIResponder.resign‌​FirstResponder), to: nil, from: nil, for: nil)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

要在键盘弹出后关闭键盘,有两种情况

  • 当UITextField位于UIScrollView内部时

  • 当UITextField位于UIScrollView外部时

  • 2.当UITextField位于UIScrollView之外时 重写UIViewController子类中的方法

    您还必须为所有UITextView添加代理

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self.view endEditing:YES];
    }
    
  • 滚动视图中,点击外部不会触发任何事件,因此在这种情况下使用点击手势识别器, 拖放滚动视图的uitappostation,并为其创建iAction
  • 要创建iAction,请按住ctrl键并单击UITap手势,然后将其拖动到viewcontroller的.h文件中

    self.view.endEditing(true)
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    
        textField.resignFirstResponder()
    
        return true
    
    }
    
    [self.view endEditing:YES];
    
    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
    
        return YES;
    }
    
    [[UIApplication sharedApplication].keyWindow endEditing:YES];