我有一个文本字段,当用户按下它以显示自定义选择器时我需要。
选择器显示正常,但问题是键盘出现在底部,我不想要。
这是一个iPad项目,我试图从我的iphone转换。在iPhone上,这很好用,键盘总是隐藏的。
我能错过什么/忘记在这里做什么?
为了将来参考这里实际发生的事情,实际上两次(iphone和ipad)键盘都不隐藏。我只是觉得它隐藏在iPhone中,因为我从底部弹出的拾取器隐藏了键盘,因为它位于它的顶部。但在ipad上,情况并非如此。
无论如何我使用下面建议的委托方法修复它。
小心,我接受了这个答案,因为那是一个回答 特别 我想要的人。其余的答案是正确的,我认为其他实现更好。
答案 0 :(得分:32)
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Here You can do additional code or task instead of writing with keyboard
return NO;
}
当您点击文本字段时,将首先调用此委托方法,如果您将“否”作为布尔值,则意味着您不想开始编辑,因此它不会显示键盘。
答案 1 :(得分:8)
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textfield == yourtextField)
{
[textfield resignFirstResponder];
// Show you custom picker here....
return NO;
}
}
您需要在控制器中实现uitextfielddelegate
。
并将代理人分配给yourtextField
。
答案 2 :(得分:6)
使用textfield delegate。
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return NO;
}
答案 3 :(得分:3)
看起来所有这些答案都采用了一种方法,在键盘出现之前简单地拒绝键盘。这可以防止第一响应者状态,这有很多优点。
允许您维护第一响应者状态的一种简单方法是创建一个空视图并将其分配给输入字段上的inputView属性。如果您使用的是iOS 9(或更高版本?),您还必须摆脱inputAssistantItem对象。
UITextField *field = [[UITextField alloc] init];
field.inputView = self.emptyKeyboard.view;
UITextInputAssistantItem *aItem = [field inputAssistantItem];
aItem.leadingBarButtonGroups = @[];
aItem.trailingBarButtonGroups = @[];
然后,如果要从备用视图控制器控制该字段,可以通过添加目标来实现:
[field addTarget:self.numberPad action:@selector(editingBegan:) forControlEvents:UIControlEventEditingDidBegin];
[field addTarget:self.numberPad action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
[field addTarget:self.numberPad action:@selector(fieldChanged:) forControlEvents:UIControlEventEditingChanged];
通过继承UITextField,可以更加干净地完成这项工作。
答案 4 :(得分:1)
使用textField Delegate,
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
textField=nil;
return NO;
}
答案 5 :(得分:0)
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Here you can do for Specific text Field by
if (textField==(the text field you don't want to show keyboard)) {
NSLog(@"don't show keyboard");
return NO;
}
else {
return YES;
}
}
答案 6 :(得分:0)
swift 3.0版
首先设置文本字段的委托
self.textfield.delegate = self
然后在扩展名
extension ViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
}
答案 7 :(得分:0)
快速3/4
添加:-您课程中的 UITextFieldDelegate 。
添加:- self.textField.delegate = self 在ViewDidLoad中
最后一个只需添加此功能-
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}