没有键盘的UITextField功能

时间:2012-01-09 00:13:46

标签: uitextfield

我正在使用自定义界面构建一个用于输入文本的应用程序,并且正在使用UILabel进行显示。然后,用户必须能够复制和粘贴文本,因此我选择了UITextField。

我遇到的问题是我无法弄清楚如何让UITextField允许选择,复制,粘贴等,但在选择字段时没有显示键盘。

我已经阅读了许多与此类似的帖子,但没有人提出完全相同的问题,也没有任何解决方案适合我。我已经尝试使该字段不可编辑,这会阻止键盘出现,但也不允许复制和粘贴。我还阅读了建议继承UITextField的注释,但我读过的没有给出具体的例子。

可以简单地完成我想要的工作,还是我需要为键盘或其他选项创建自定义视图?

谢谢, 安德鲁

解决方案:

最后,我在stackoverflow上发现了另一个类似的(但不是确切的)问题,一个答案解决了我的问题。解决这个问题的方法就是让应用程序显示一个虚拟视图作为键盘,其他一切都按照应有的方式工作。

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

适用于UITextField和UITextView,需要将它们设置为可编辑。

6 个答案:

答案 0 :(得分:26)

解决方案:

最后,我在stackoverflow上发现了另一个类似的(但不是确切的)问题,一个答案解决了我的问题。解决这个问题的方法就是让应用程序显示一个虚拟视图作为键盘,其他一切都按照应有的方式工作。

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

适用于UITextFieldUITextView,需要将它们设置为可编辑。

答案 1 :(得分:11)

作者的代码......

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

(其中'VIN'是UITextField变量,此代码放在viewDidLoad之类的地方)

...确实可以防止显示iPhone / iPad弹出键盘。

但是,这只是键盘界面的“显示”部分。如果您安装了外接键盘,例如Apple的物理iPhone / iPad键盘插入30针或其中一个支持蓝牙的键盘(甚至使用带有模拟器的Mac键盘),用户仍然可以输入字段而不用显示键盘弹出显示。

此外,即使没有显示键盘弹出窗口,用户仍然可以通过双击字段并选择PASTE从粘贴板粘贴到字段中。

以下附加代码可防止使用这些键盘并阻止PASTE:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"myXViewController shouldChangeCharactersInRange");
    return FALSE;
}

...仍然允许选择,但不允许在字段中编辑文本。

答案 2 :(得分:2)

将其设为UITextView,并使UITextView不可编辑。这仍然允许复制。

编辑:是的我坏了我忘记了那个部分......基本上你所做的就是制作一个可滚动的标签。

如果您想要没有键盘的所有功能,您需要使其可编辑,并将UITextFieldDelegate的-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField编辑为return NO。这将阻止键盘出现。

答案 3 :(得分:1)

在Swift 4中:

let dummyView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
textInputLabel.inputView = dummyView
textInputLabel.becomeFirstResponder()

答案 4 :(得分:0)

这是对我有用的方法:

func textFieldDidBeginEditing(_ textField: UITextField) {
    if someCondition {
        textField.resignFirstResponder()
    }
}

答案 5 :(得分:-1)

我在委托方法中使用[textfield resignFirstResponder] - (void)textFieldDidBeginEditing:(UITextField *)textField,如下所示:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    if (textField == yourTextField){
      [yourTextfield resignFirstResponder];
    }
}

因此键盘没时间出现