iphoneアプリでキーボードを起動することは可能ですか?または私は見えないテキストビューを持っている必要がありますか?iphoneキーボード(テキストビューなし)
もしそうなら、あなたはどのようにしてプログラムでテキストビューを作成し、キーボードを起動するのですか?(ユーザーはテキストビューをタップする必要はありません)私はインターフェイスビルダーを使用して見つけることができる唯一の例です。
iphoneアプリでキーボードを起動することは可能ですか?または私は見えないテキストビューを持っている必要がありますか?iphoneキーボード(テキストビューなし)
もしそうなら、あなたはどのようにしてプログラムでテキストビューを作成し、キーボードを起動するのですか?(ユーザーはテキストビューをタップする必要はありません)私はインターフェイスビルダーを使用して見つけることができる唯一の例です。
キーボードを表示する唯一の(有効な)方法は、最初の応答者であるテキストフィールドを持つことです。 非表示のテキストフィールドでbecomeFirstResponder
を呼び出すことで、プログラムを非表示にして、プログラムレスにすることができます。このようなものが作品
あなたはこのような何かを行うことによって、プログラムUITextViewを作成することができます(aRectとビューが存在すると仮定)
var textView = [[[UITextView alloc] initWithFrame:aRect] autorelease];
[view addSubview:textView];
[textView becomeFirstResponder];
方法はNSNotificationCenterパブリッシュ/サブスクライブ・モデルを経由しています。まず、あなたは、あなたがthisをやって試すことができ、addObserver:selector:name:object:
を使用する必要があります。
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:NSTextDidBeginEditingNotification object:self]];
しかし、私はあなたが得るだろう、またはキーボードのタイピングの文字値を取得するには、のために登録する必要がありますどのような通知はよく分かりません。幸運と幸せなハッキング:)
これはどのようにしてキーボードを立ち上げますか? – klaaspieter
私はそれが間違っているかどうかわからないが、その秘訣は投稿する正しい通知を見つけることである – slf
多くのキーボード通知のものhttp://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top -keyboard.html – slf
もう少し掘削の後、私はthisを見つけた。それは非公式だが、それはうまくいくと思う。
protocol KeyboardInputControlDelegate: class {
func keyboardInputControl(keyboardInputControl:KeyboardInputControl, didPressKey key:Character)
}
class KeyboardInputControl: UIControl, UIKeyInput {
// MARK: - properties
weak var delegate: KeyboardInputControlDelegate?
// MARK: - init
override init(frame: CGRect) {
super.init(frame: frame)
addTarget(self, action: Selector("onTouchUpInside:"), forControlEvents: .TouchUpInside)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - UIView
override func canBecomeFirstResponder() -> Bool {
return true
}
// MARK: - methods
dynamic private func onTouchUpInside(sender: KeyboardInputControl) {
becomeFirstResponder()
}
// MARK: - UIKeyInput
var text:String = ""
func hasText() -> Bool {
return text.isEmpty
}
func insertText(text: String) {
self.text = text
for ch in text {
delegate?.keyboardInputControl(self, didPressKey: ch)
}
}
func deleteBackward() {
if !text.isEmpty {
let newText = text[text.startIndex..<text.endIndex.predecessor()]
text = newText
}
}
}
使用例:
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];
UIKeyInput
はあなたの友達です。赤のビューをタップして、Xcodeのコンソール出力を参照してください。
class ViewController: UIViewController, KeyboardInputControlDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let kic = KeyboardInputControl(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
kic.delegate = self
kic.backgroundColor = UIColor.redColor()
view.addSubview(kic)
}
func keyboardInputControl(keyboardInputControl: KeyboardInputControl, didPressKey key: Character) {
println("Did press: \(key)")
}
}
UIKeyInput
が解決の鍵となります。
protocol KeyboardInputControlDelegate: class {
func keyboardInputControl(keyboardInputControl:KeyboardInputControl, didPressKey key:Character)
}
class KeyboardInputControl: UIControl, UIKeyInput {
// MARK: - properties
weak var delegate: KeyboardInputControlDelegate?
// MARK: - init
override init(frame: CGRect) {
super.init(frame: frame)
addTarget(self, action: Selector("onTouchUpInside:"), forControlEvents: .TouchUpInside)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - UIView
override func canBecomeFirstResponder() -> Bool {
return true
}
// MARK: - methods
dynamic private func onTouchUpInside(sender: KeyboardInputControl) {
becomeFirstResponder()
}
// MARK: - UIKeyInput
var text:String = ""
func hasText() -> Bool {
return text.isEmpty
}
func insertText(text: String) {
self.text = text
for ch in text {
delegate?.keyboardInputControl(self, didPressKey: ch)
}
}
func deleteBackward() {
if !text.isEmpty {
let newText = text[text.startIndex..<text.endIndex.predecessor()]
text = newText
}
}
}
使用例。赤いビューをタップして、Xcodeコンソールの出力を確認してください:
class ViewController: UIViewController, KeyboardInputControlDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let kic = KeyboardInputControl(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
kic.delegate = self
kic.backgroundColor = UIColor.redColor()
view.addSubview(kic)
}
func keyboardInputControl(keyboardInputControl: KeyboardInputControl, didPressKey key: Character) {
println("Did press: \(key)")
}
}
なぜテキストを入力する必要がない場合にキーボードを「持ち上げたいですか? –
可能な複製[UITextFieldまたはUITextViewなしでUIKeyboardをプルする方法](http://stackoverflow.com/questions/1376120/how-to-pull-up-a-uikeyboard-without-a-uitextfield-or -uitextview) – JosephH