禁用UITextField键盘?

时间:2011-04-11 00:51:31

标签: iphone cocoa-touch uitextfield iphone-softkeyboard

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

如何完全禁用键盘?非常感谢任何帮助。

10 个答案:

答案 0 :(得分:98)

默认情况下,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.
}

答案 1 :(得分:55)

在Swift 2.x,3.x,4.x

textField.inputView = UIView()

诀窍

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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

myTextView.editable = NO

答案 4 :(得分:1)

当在同一视图上有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

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

enter image description here

答案 5 :(得分:0)

要禁用UITextField键盘:

  1. 转到 Main.Storyboard
  2. 点击 UITextField 将其选中
  3. 显示 属性检查器
  4. 取消选中 已启用用户互动
  5. 要禁用UITextView键盘:

    1. 转到 Main.Storyboard
    2. 点击 UITextView 将其选中
    3. 显示 属性检查器
    4. 取消选中 可修改 行为

答案 6 :(得分:0)

enter image description here有一个简单的技巧。放置一个空按钮 (无文字)在键盘上方,并为其分配了一个动作“事件”。这将阻止键盘出现,并且您可以在按钮单击的手柄中执行所需的任何操作

答案 7 :(得分: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) <<<
}

答案 8 :(得分:-1)

private void TxtExpiry_EditingDidBegin(object sender, EventArgs e)
    {
        ((UITextField)sender).ResignFirstResponder();
    }

在C#中,这对我有用,我不会使用故事板。

答案 9 :(得分:-2)

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

  1. 点击您想要编辑的文本字段
  2. 转到右侧的attirube检查员
  3. 取消选中“启用”状态
  4. enter image description here

    或者如果你想通过代码来做。你可以简单地创建一个这个文本字段的@IBOutlet,给它一个名字,然后在viewDidLoad函数中使用这个变量名(或者你想要的任何自定义函数)就像这样(在swift 3.0.1中):

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Do any additional setup after loading the view.
    
        myTextField.isEditable = false
    }