Клавиатура iphone без просмотра текста
Можно ли вызвать клавиатуру в приложении для iphone без просмотра текста? или мне нужно иметь невидимое текстовое представление?
если да, как вы программно создаете текстовое представление, а затем вызываете клавиатуру (без необходимости нажимать на текстовое представление пользователя)? единственные примеры, которые я могу найти, используют конструктор интерфейсов..
4 ответа
Единственный (действительный) способ показать клавиатуру - это иметь текстовое поле, которое будет первым респондентом. Вы можете скрыть это и сделать его первым отвечающим программно, вызвав becomeFirstResponder
на скрытом текстовом поле.
Вы можете создать UITextView программно, выполнив что-то вроде этого (предположим, что aRect и view существуют)
var textView = [[[UITextView alloc] initWithFrame:aRect] autorelease];
[view addSubview:textView];
[textView becomeFirstResponder];
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)")
}
}
После еще нескольких копаний я нашел это. Это неофициально, но я уверен, что это работает.
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];
Этот способ работает через модель публикации / подписки NSNotificationCenter. Сначала вам нужно использовать addObserver:selector:name:object:
тогда вы можете попробовать сделать это:
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:NSTextDidBeginEditingNotification object:self]];
Но я не уверен, какие уведомления вы бы получили или должны были бы зарегистрироваться для получения значений символов клавиатуры. Удачи и счастливого взлома:)