他のすべてがうまく機能しているので、私は奇妙な問題に陥っていました。アプリケーションをコンパイルしてこの問題が発生したとき、UITextField
の空白がポップアップするときに突然ですが、キーボードが表示されず、何も入力できません。
以下はキーボードの問題を修正します
シミュレータ->ハードウェア->キーボード->ソフトウェアキーボードの切り替えは、この問題を解決するはずです。
これを試して:
後藤:
iOS Simulator -> Hardware -> Keyboard
そしてチェックを外します
'Connect Hardware Keyboard'
または、単純に: ⇧ shift + ⌘ Command + K
コーディングを続ける......... :)
これは、シミュレーターの設定が原因でXcode 6/iOS 8でも発生する可能性があります。
私は同じ問題を抱えていますが、5sシミュレーターでのみです。そして、シミュレーター->コンテンツと設定をリセットしようとしました。実際に問題を解決しました。
また、yourTextField.inputView
をいじらないようにしてください。
この点で2つのことを確認してください
1 -userInteractionEnabled=true
2- textFielfd.editable = YES;
これで問題が解決することを願っています。
ある時点で次のようなことをしているかどうかを確認します
[self.view endEditing:YES];
[self.myTextField resignFirstResponder];
または、最初のレスポンダーを他のコントロールに割り当てています。
それが役に立てば幸い
アウトレットがマップされ、デリゲートがコントローラーに設定されているかどうかを確認しますか?また、コントローラーに<UITextFieldDelegate>
セット。ファイルインスペクターのスクリーンショットを送信しますか?
私は同様の問題を抱えていましたが、実際のデバイスでした。
Apple開発者テクニカルサポート(Apple DTS)と話しましたが、彼らはSwiftコンパイラーまたはXcodeのバグだと言いました。
少しの回避策を行いました。 Appleがこの問題を解決するまでこれが最良の解決策であるとは思わないが、今は問題なく動作する。
UITextFieldクラスをオーバーライドするだけです:
class PBTextField : UITextField {
var keyboardShowDate = NSDate()
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.initialisation()
}
override init(frame: CGRect)
{
super.init(frame: frame)
self.initialisation()
}
func initialisation()
{
self.addTarget(self, action: "editingDidBegin:", forControlEvents: UIControlEvents.EditingDidBegin)
self.addTarget(self, action: "editingDidEnd:", forControlEvents: UIControlEvents.EditingDidEnd)
}
// MARK: Delegates
func editingDidBegin(sender: AnyObject)
{
self.becomeFirstResponder()
self.keyboardShowDate = NSDate()
}
func editingDidEnd(sender: AnyObject)
{
if(fabs(self.keyboardShowDate.timeIntervalSinceNow) <= 0.5)
{
self.becomeFirstResponder()
dispatch_after(0.1, block: { () -> Void in
self.becomeFirstResponder()
})
}
}
}
発送方法:
typealias dispatch_cancelable_block_t = ((cancel: Bool) -> Void)
func dispatch_async(block: dispatch_block_t, background: Bool = true) -> dispatch_cancelable_block_t?
{
return dispatch_after(0, block: block, background: background)
}
func dispatch_after(delay: NSTimeInterval = 0, block: dispatch_block_t, background: Bool = false) -> dispatch_cancelable_block_t?
{
var cancelableBlock : dispatch_cancelable_block_t?
let delayBlock : dispatch_cancelable_block_t = { (cancel) -> Void in
if(cancel == false)
{
if(background)
{
block()
}
else
{
dispatch_async(dispatch_get_main_queue(), block)
}
}
cancelableBlock = nil
};
cancelableBlock = delayBlock
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * NSTimeInterval(NSEC_PER_SEC))), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
if let cb = cancelableBlock
{
cb(cancel: false)
}
})
return cancelableBlock
}
func cancel_block(block: dispatch_cancelable_block_t)
{
block(cancel: true)
}
これが誰かに役立つことを願っています。
より良い解決策があれば、コメントで教えてください。
ありがとう
ジョルジ
[textField canBecomeFirstresponder];
を追加