用户点击文本域外的其他区域时如何关闭键盘?

Sai*_*son 52 objective-c ios

今天我试着在我的iPod(iOS 6.1.3)上运行我的代码,我在这里发现了一些有趣的东西......

首先,当我点击文本字段时,键盘会显示,但当我点击文本字段外的其他位置时,它不会隐藏.

所以我决定使用Google搜索并找到了这个解决方案:

_fieldEmail.delegate = self;
_fieldEmail.returnKeyType = UIReturnKeyDone;

_fieldPassword.delegate = self;
_fieldPassword.returnKeyType = UIReturnKeyDone;

_fieldRegisterName.delegate = self;
_fieldRegisterName.returnKeyType = UIReturnKeyDone;

_fieldRegisterEmail.delegate = self;
_fieldRegisterEmail.returnKeyType = UIReturnKeyDone;

_fieldRegisterPassword.delegate = self;
_fieldRegisterPassword.returnKeyType = UIReturnKeyDone;
Run Code Online (Sandbox Code Playgroud)

它有效...它在键盘底部给出一个"完成"按钮,现在可以通过按下它来隐藏键盘.

但我这里有两个问题:

  1. 键盘只有在点击"完成"按钮时才会隐藏.不要通过点击文本字段外的其他区域.我不知道iOS世界是否正常,但通常我看到很多应用程序都不像这样.
  2. 有没有办法循环这个过程所以我没有手动添加该委托我所拥有的所有文本域?怎么做?

这就是我需要知道的

ico*_*ter 82

以下代码将适用于UIView中的所有组件 UITextField

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UIView * txt in self.view.subviews){
        if ([txt isKindOfClass:[UITextField class]] && [txt isFirstResponder]) {
            [txt resignFirstResponder];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];    
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您对视图进行控制并点按它们,则无法使用此功能. (5认同)

Lud*_*Zik 30

  1. 只需在您的视图中添加一个UITapGestureRecogniser即可调用 resignFirstResponder

在viewDidLoad中:

UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc] 
                                   initWithTarget:self
                                   action:@selector(hideKeyBoard)];

[self.view addGestureRecognizer:tapGesture];
Run Code Online (Sandbox Code Playgroud)

然后 :

-(void)hideKeyBoard {
       [yourTextField resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

2.你可以继承UITextField,但除非你有1000个textFields,否则你可以像现在这样做.

  • 如果您的屏幕上有其他需要点击的控件(例如表格单元格上的segue),则无法使用此功能.有没有办法只在键盘显示时调用轻击手势? (2认同)

Vin*_*shi 19

这是关于Xcode 6.0.1的Swift编程

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    let tapRecognizer = UITapGestureRecognizer(target: self, action: "handleSingleTap:")
    tapRecognizer.numberOfTapsRequired = 1
    self.view.addGestureRecognizer(tapRecognizer)
}

func handleSingleTap(recognizer: UITapGestureRecognizer) {
    self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)


iPa*_*tel 7

使用Either

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleTap];
Run Code Online (Sandbox Code Playgroud)

和方法代码

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [self.TextFiledName resignFirstResponder];

}
Run Code Online (Sandbox Code Playgroud)

或_和最好的其他选项是

只需添加

  [self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)

当您从视图中点击任何地方时,键盘将隐藏:)


小智 7

解雇键盘

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        [self.view endEditing:YES];
        [super touchesBegan:touches withEvent:event];
    }
Run Code Online (Sandbox Code Playgroud)