62

我在我的应用程序中放置了一个数字键盘,用于将数字输入到文本视图中,但是为了输入数字,我必须单击文本视图。一旦我这样做,常规键盘就会出现,这是我不想要的。

如何完全禁用键盘?任何帮助是极大的赞赏。

4

10 回答 10

106

UITextField 的 inputView 属性默认为 nil,这意味着会显示标准键盘。

如果您为其分配一个自定义输入视图,或者只是一个虚拟视图,那么键盘将不会出现,但闪烁的光标仍会出现:

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

如果要隐藏键盘和闪烁的光标,请使用以下方法:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO;  // Hide both keyboard and blinking cursor.
}
于 2011-12-02T01:07:46.887 回答
72

对于 Swift 2.x、3.x、4.x、5.x

textField.inputView = UIView()

成功了

于 2015-12-17T21:57:27.253 回答
5

如果它是 UITextField,您可以将其enabled属性设置为 NO。

如果它是一个 UITextView,你可以-textViewShouldBeginEditing:在它的委托中实现返回 NO,这样它就永远不会开始编辑。或者您可以将其子类化并覆盖-canBecomeFirstResponder以返回 NO。或者您可以利用它的编辑行为并将您的数字按钮放入您用作文本视图的视图中inputView。这应该会导致在编辑文本视图时显示按钮。这可能是也可能不是你想要的。

于 2011-04-11T01:14:49.903 回答
4

根据您现有按钮的工作方式,这可能会破坏它们,但您可以阻止键盘显示将 textView 的可编辑属性设置为 NO

myTextView.editable = NO
于 2011-04-11T01:19:00.093 回答
2

当在同一个视图上有 2 个文本字段时,我遇到了同样的问题。我的目的是为一个文本字段显示一个默认键盘并隐藏第二个并显示一个下拉列表。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 

方法根本没有像我预期的那样对 2 个文本字段起作用,我发现的唯一解决方法是

    UIView* dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
    myTextField.inputView = dummyView; 
    myTextField.inputAccessoryView = dummyView; 
    myTextField.tintColor =  myTextField.backgroundColor; //to hide a blinking cursor

这将完全隐藏目标文本字段的键盘(在我的情况下为DropDownList),并在用户切换到第二个文本字段时显示默认键盘(我的屏幕截图上的帐号)

在此处输入图像描述

于 2016-07-25T17:53:54.323 回答
0

在此处输入图像描述有一个简单的技巧。在键盘上方放置一个空按钮(无文本),并为其分配一个动作事件。这将停止键盘出现,您可以在手柄中执行您想要的任何操作以单击按钮

于 2019-10-19T18:01:01.230 回答
0

要禁用 UITextField 键盘:

  1. 转到Main.Storyboard
  2. 单击UITextField以选择它
  3. 显示属性检查器
  4. 取消选中用户交互已启用

要禁用 UITextView 键盘:

  1. 转到Main.Storyboard
  2. 点击UITextView将其选中
  3. 显示属性检查器
  4. 取消选中可编辑行为
于 2016-07-14T20:35:45.173 回答
0

我使用了keyboardWillShow NotificationtextField.endEditing(true)

lazy var myTextField: UITextField = {
    let textField = UITextField()
    // ....
    return textField
}()

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
}

@objc func keyboardWillShow(_ notification: Notification) {
        
    myTextField.endEditing(true)

    // if using a textView >>> myTextView.endEditing(true) <<<
}
于 2020-08-22T06:37:36.963 回答
-2
private void TxtExpiry_EditingDidBegin(object sender, EventArgs e)
    {
        ((UITextField)sender).ResignFirstResponder();
    }

在 C# 中,这对我有用,我不使用情节提要。

于 2016-10-28T13:07:50.373 回答
-3

在 Xcode 8.2 中,您可以通过取消选中状态“启用”选项轻松完成此操作。

  1. 单击您想要不可编辑的文本字段
  2. 前往右侧的服装检查员
  3. 取消选中状态的“启用”

在此处输入图像描述

或者,如果您想通过代码执行此操作。您可以简单地创建此文本字段的@IBOutlet,为其命名,然后在 viewDidLoad 函数(或任何自定义函数,如果您愿意)中使用此变量名称,如下所示(在 swift 3.0.1 中):

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    myTextField.isEditable = false
}
于 2016-12-22T23:17:24.037 回答