IOS 6GMを搭載したiPadの場合。 6つのUITextFields、3つのUITextViews、およびポップオーバー/アクションシートをトリガーするUIButtonがあります。
UITextFieldsまたはUITextViewsのいずれかを選択すると、キーボードがポップアップしてカーソルが表示されますが、テキストを入力できません。 UIButtonを押してポップオーバーを表示し、その外側をタップしてポップオーバーを閉じ、UITextFieldsまたはUITextViewsに戻ると、機能します。
UITextxxxx.delegate = self;があります。それらすべてに設定します。 .hファイルのxibs、UITextFieldDelegate、UITextViewDelegate、および次の項目で「有効」と「ユーザーインタラクションが有効」がオフになっています。
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
return YES;
}
- (IBAction)textFieldReturn:(id)sender {
[sender resignFirstResponder];
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
if (textView == notestextView){
[notestextView becomeFirstResponder];
}
if (textView == notestextViewTwo){
[notestextViewTwo becomeFirstResponder];
}
if (textView == notestextViewThree){
[notestextViewThree becomeFirstResponder];
}
return YES;
}
- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
return YES;
}
[xxxxxxxbecomeFirstResponder]も試しました。 viewDidLoadで。これにより、実行時にキーボードがポップされ、フィールドにカーソルが置かれますが、UIButtonをタップしてポップオーバーを表示するまで、キーボードを入力できません。
なぜ私がフィールドに入力できないのか、そしてなぜポップオーバーを呼び出すと「それを修正する」のか誰もが知っていますか?
更新9/18:テキストフィールドとテキストビューを含むビューを持つ新しいビューをアプリにプッシュしました。代議員はすべて準備されています。同じ動作。キーボードとカーソルが表示されますが、入力はできません。それは物事を台無しにするpopovercontrollerを除外します。
これはiOS6のバグだと強く思い始めています。これは、iOS 4および5のiPhoneバージョンのアプリで見たものとほぼ同じで、問題は発生しませんでした。 iPhoneバージョンとiPadバージョンの唯一の違いは、イメージピッカーの表示方法です。 iPadにはポップオーバーを使用する必要があります。だから私はポップオーバーの代表がそれと関係があると思っていました。
IOS 6でUITextFieldsとUITextViewsを実装することの間に、私が知らない基本的な違いはありますか?ありそうもないようです。
それが私のアプリの流れをこのように助けるなら:
10個のボタンを備えたメインビュー
- 各ボタンは、ナビゲーションコントローラーを介してテーブルビューを押します
- tableviews詳細ビューをプッシュします-textfieldsとtextviewsは上記の動作を示します
- tableviewには、モーダルビューを押して新しいアイテムを追加する追加ボタンもあります。テキストフィールドとテキストビューは、上記の動作を示します。
これは元々iOS5で構築されたiPhoneアプリでした。iPadアプリにするために、プロジェクトを複製し、すべての.xibs
をiPadバージョンにアップグレードしました。それがバグなのか、それともiOS 6へのアップグレードと関係があるのかはわかりませんが、そのようにするとMainWindow.xib
が台無しになります。
MainWindow xibで、タイトルに"MainViewController"
と入力しました(以前は空白でした)。
そして、"Visible at Launch"
をチェックしました。起動時にすでに表示されていますが、チェックを外さないと何かが台無しになります。
これで、すべてのテキストビューとテキストフィールドが機能します。
これと同じ問題が発生しました。アプリデリゲートに[self.window makeKeyAndVisible]
があることを確認してください。それは私にとってそれを解決しました。
これは明らかにiOS6のバグです。[searchBar becomeFirstResponder];
をsearchBarTextDidBeginEditing
メソッドに入れるだけです。
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
if (!self.window.isKeyWindow) {
[self.window makeKeyAndVisible];
}
}
この解決策は私のために働きます。
私にとってあなたの解決策はうまくいかないので、私は別のものを見つけました。
私はRevmobAdsを使用しているので、アプリの起動時にフルスクリーンビューとバナービューが読み込まれます。 Revmobは、すべてのビューコントローラーに同じバナーを表示するために一部のスタッフを使用しています。これが問題だと思います。 revmobを無効にすると、テキストフィールドにテキストを追加できます。
他の回答を明確にするために、キーウィンドウに設定されていないウィンドウにテキストを入力することはできません。ほとんどのアプリケーションは1つのウィンドウのみを使用するか、追加のウィンドウにテキスト入力がないため、この問題が発生することはありません。
複数のウィンドウを処理する場合は、フォーカスを切り替えるときに必ずresignKeyWindow
+ makeKeyWindow
を実行し、非常に重要なこととして、後でキーウィンドウを復元してください。
dispatch_async(dispatch_get_main_queue(),^{});
でbecomeFirstResponderを試してください