我正在使用自定义界面构建一个用于输入文本的应用程序,并且正在使用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,需要将它们设置为可编辑。
答案 0 :(得分:26)
解决方案:
最后,我在stackoverflow上发现了另一个类似的(但不是确切的)问题,一个答案解决了我的问题。解决这个问题的方法就是让应用程序显示一个虚拟视图作为键盘,其他一切都按照应有的方式工作。
UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor
适用于UITextField
和UITextView
,需要将它们设置为可编辑。
答案 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];
}
}
因此键盘没时间出现