我在这里阅读了很多关于这个主题的帖子,但我无法找到我的问题的答案,所以,希望你不会对另一个 UIKeyboard 帖子感到无聊:-)
在我的视图控制器的实现中,我添加self
了两个通知的观察者UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
,传递选择器keyboardWillShow:
并keyboardWillHide:
处理通知。当我触摸 aUITextField
时,会调用该keyboardWillShow:
方法,但是当我按下“完成”按钮(关闭键盘)时,keyboardWillHide:
不会调用该方法。
真的,我想UITextField
用键盘右下角的“隐藏按钮”让我的显示器成为一个键盘,但我找不到正确的键盘类型。也许我需要将文本字段 retuntype 设置为“...完成”。这样,我看到“返回”键变成“完成”。
所以我将工具栏设置为我UITextField
的inputAccessoryView
,所以现在我可以显示一个标准键盘,上面有一个工具栏,上面有“完成”按钮。当用户触摸该按钮时,我使用该resignFirstResponder
方法隐藏键盘。
奇怪的是,当我打电话时resignFirstResponder
,UIKeyboardWillHideNotification
没有发布;至少keyboardWillHide:
没有调用该方法。
你对我有什么建议?我真的很想用带有向下箭头的小按钮显示一个键盘来隐藏键盘,但这个解决方案也可能是正确的,但我想调整视图的大小并为此我需要观察者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]];
我从“你的”帖子中获取了这些声明:-) 但是 willShow 有效......
UIToolbar
分配为inputAccessoryView
我的文本字段的“完成”按钮的操作是:
-(void)keyboardDone {
[msgTextField resignFirstResponder];
关闭:好的!当开发人员很愚蠢时......它很愚蠢:-) :-)
这是我更正后的 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() 语句……