38

我正在使用基于 iPhone 消息传递的应用程序。

inputAccessoryView我想在不使用UITextViewand的情况下在键盘中显示带键盘的键盘UITextField。有可能做到这一点吗?请任何人帮助我。

提前致谢。期待您的帮助。谢谢。

编辑:

因为我不希望UITextField/UITextView和控件位于UITextView/中UITextField。我要inputAccessoryView在键盘上添加的是UITextView. 当用户触摸UITextview键盘inputView时,实际过程将继续。

4

6 回答 6

27

对于任何想要在没有UITextField/UITextView的情况下显示键盘的人来说,可以轻松地扩展一些视图,这需要通过实现UIKeyInput协议和canBecomeFirstResponder方法来输入文本。

于 2013-07-06T20:16:58.320 回答
20

请参阅此处的文档:

简单文本输入

您需要做的就是让您的视图实现UIKeyInput[inputView becomeFirstResponder]在视图被触摸时调用。您的视图还需要实现canBecomeFirstResponder并返回 YES。

执行此操作的 iOS 文档中的示例代码。

于 2013-08-21T21:08:11.487 回答
5

制作一个视图、标签或任何符合 UIKeyInput 的东西。在这种情况下,一个 UIView

子类一个 UIView:

import UIKit

class KeyInputView: UIView {
   var _inputView: UIView?

   override var canBecomeFirstResponder: Bool { return true }
   override var canResignFirstResponder: Bool { return true }

   override var inputView: UIView? {
       set { _inputView = newValue }
       get { return _inputView }
   }
}

// MARK: - UIKeyInput
//Modify if need more functionality
extension KeyInputView: UIKeyInput {
    var hasText: Bool { return false }
    func insertText(_ text: String) {}
    func deleteBackward() {}
}

设置您的视图,在这种情况下使用选择器(在 viewDidLoad 或任何地方)

let languangePicker = UIPickerView()
languangePicker.dataSource = self
languangePicker.delegate = self
keyInputView.inputView = languangePicker

以显示:

keyInputView.becomeFirstResponder()

隐藏:

keyInputView.resignFirstResponder()

设置选择器数据,来自数据源(编译器强制你这样做)

从委托中获取数据选择器事件

于 2019-07-15T12:49:28.927 回答
3

您可以尝试这些其他 SO 帖子的答案:

你也可以试试这个:

UIKeyboard *keyboard = [[[UIKeyboard alloc] initWithFrame: CGRectMake(0.0f,          contentRect.size.height - 216.0f, contentRect.size.width, 216.0f)] autorelease];
[keyboard setReturnKeyEnabled:NO];
[keyboard setTapDelegate:editingTextView];
[inputView addSubview:keyboard];
于 2012-10-22T06:34:47.693 回答
2

在 xcode 模拟器中:

有时键盘不会显示,因为软件键盘已关闭。转到硬件-> 键盘-> 切换键盘

于 2018-05-22T10:22:53.963 回答
0

我制作了一个小实用程序文件,可以在按钮触摸上调用带有文本字段的键盘!

https://github.com/havocked/TZKeyboardPop

于 2015-02-20T14:36:20.113 回答