このトピックに関する多くの投稿をここで読みましたが、私の質問に対する答えを見つけることができなかったので、別の UIKeyboard の投稿に飽きないことを願っています :-)
私のView Controllerの実装では、2つの通知とself
のオブザーバーとして追加し、セレクターを渡し、通知を処理しました。に触れるとメソッドが呼び出されますが、「完了」ボタン(キーボードを閉じる)を押してもメソッドは呼び出されません。UIKeyboardWillShowNotification
UIKeyboardWillHideNotification
keyboardWillShow:
keyboardWillHide:
UITextField
keyboardWillShow:
keyboardWillHide:
本当は、UITextField
ショーをキーボードの右下にある「非表示ボタン」のあるキーボードにしたいのですが、適切なキーボードの種類が見つかりませんでした。たぶん、テキストフィールドのretuntypeを「...Done」に設定する必要があります。そのようにして、「戻る」キーが「完了」に変わることがわかりました。
そこで、ツールバーを自分UITextField
のに設定したinputAccessoryView
ので、「完了」ボタンで上部にツールバーを備えた標準キーボードを表示できます。ユーザーがそのボタンに触れると、resignFirstResponder
メソッドでキーボードを非表示にします。
奇妙なことに、 を呼び出したときにresignFirstResponder
、UIKeyboardWillHideNotification
が投稿されません。少なくともkeyboardWillHide:
メソッドは呼び出されません。
あなたは私に何を提案しますか? 私は本当にキーボードを非表示にするために下向き矢印の付いた小さなボタンでキーボードを表示したかったのですが、この解決策も正しいかもしれませんが、ビューのサイズを変更してこれを行うには、observer が必要UIKeyboardWillHideNotification
です。
助けてくれてどうもありがとう...
(追加した:)
でviewDidLoad
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:[[self view] window]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:[[self view] window]];
これらの宣言は、「あなたの」投稿の1つから取得しました:-)しかし、willShowは機能します...
私のテキストフィールドにUIToolbar
割り当てられている「完了」ボタンのアクションは次のとおりです。inputAccessoryView
-(void)keyboardDone {
[msgTextField resignFirstResponder];
閉店:OK!開発者が愚かであるとき...それは愚かです:-) :-)
これは私の修正された willHide メソッドです:
-(void)keyboardWillHide:(NSNotification*)n {
NSDictionary* userInfo;
CGSize keyboardSize;
CGRect viewFrame;
/* This was the bad guy :) I forgot to delete it
* after I previously copied the willShow method that
* checks if keyboard is already shown (if so returns).
*
* if( keyboardIsShown )
* return;
*/
userInfo = [n userInfo];
keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
viewFrame = [[self scrollView] frame];
viewFrame.size.height += ( keyboardSize.height - TABBAR_HEIGHT );
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.5];
[[self scrollView] setFrame:viewFrame];
[UIView commitAnimations];
keyboardIsShown = NO;
NSLog(@"HIDE\n");
}
まず第一に、私を助けてくれたこの無駄な仕事に感謝したいと思います. いくつかの点をあげたいので、答えごとに「関心点」を上げようとしますが、正しいものを選択する必要があります...難しい部分... :-)
もう一度すみません... if() ステートメントを本当に見ていませんでした...