可以在不使用UITextField和UITextView iphone应用程序的情况下显示键盘吗?

时间:2012-10-22 06:25:10

标签: iphone ios uitextfield uitextview uikeyboard

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

我想在键盘中使用键盘inputAccessoryView显示键盘而不使用UITextViewUITextField。有可能这样做吗?请任何人帮我这个。

提前致谢。期待你的帮助。感谢。

修改

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

6 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:18)

请在此处查看文档:

Simple Text Input

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

Sample code from the iOS documentation which does this.

答案 2 :(得分: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];

答案 3 :(得分:0)

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

https://github.com/havocked/TZKeyboardPop

答案 4 :(得分:0)

在xcode模拟器中:

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

答案 5 :(得分:0)

制作视图,标签或任何符合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()

从数据源设置选择器数据(编译器强制执行此操作)

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