我有一个文本字段,当用户按下它以显示自定义选择器时我需要。
选择器显示正常,但问题是键盘出现在底部,我不想要那样。
这是一个iPad项目,我试图从我的iPhone转换。在iPhone上,这很好用,键盘总是隐藏的。
我有什么遗失/忘记在这里做什么?
为了将来参考这里实际发生的事情,实际上两次(iphone和ipad)键盘都没有被隐藏。我只是觉得它隐藏在iPhone中,因为从底部弹出的拾取器隐藏了键盘,因为它位于它的顶部。但在ipad上,情况并非如此。
无论如何我使用下面建议的委托方法修复它。
小心,我接受了这个答案,因为它是那个具体回答我想要的人。其余的答案是正确的,我认为其他实现更好。
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Here You can do additional code or task instead of writing with keyboard
return NO;
}
当你点击文本字段时,这个委托方法将首先调用,如果你写一个布尔值,则表示你不想开始编辑,因此它不会显示键盘。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textfield == yourtextField)
{
[textfield resignFirstResponder];
// Show you custom picker here....
return NO;
}
}
你需要在控制器中实现uitextfielddelegate
。
并将代表分配给yourtextField
。
使用textfield委托。
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return NO;
}
看起来所有这些答案都采用了一种方法,在键盘出现之前简单地拒绝键盘。这可以防止第一响应者状态,这具有许多优点。
允许您维护第一响应者状态的一种简单方法是创建一个空视图并将其分配给输入字段上的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,也可以更干净地完成这项工作。
使用textField委托,
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
textField=nil;
return NO;
}
-(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;
}
}
swift 3.0版本
首先设置文本字段的委托
self.textfield.delegate = self
然后在扩展中
extension ViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
}
斯威夫特3/4
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}