我在这里读了很多关于这个主题的帖子,但我无法找到我的问题的答案,所以,希望你不会对另一篇 UIKeyboard 帖子感到无聊:-)
在我的视图控制器的实现中我添加了self
作为两个通知的观察员UIKeyboardWillShowNotification
and UIKeyboardWillHideNotification
,传递选择器keyboardWillShow:
and keyboardWillHide:
处理通知。当我触摸一个UITextField
, the keyboardWillShow:
方法被调用,但是当我按下“完成”按钮(关闭键盘)时keyboardWillHide:
方法未被调用。
说实话,我很想做我的UITextField
显示键盘右下角带有“隐藏按钮”的键盘,但我无法找到正确的键盘类型。也许我需要将文本字段返回类型设置为“...完成”。这样我就看到“返回”键变成了“完成”。
所以我设置了一个工具栏作为我的UITextField
's inputAccessoryView
,所以现在我可以显示一个标准键盘,上面有一个工具栏和“完成”按钮。当用户触摸该按钮时,我用resignFirstResponder
方法。
奇怪的是当我打电话时resignFirstResponder
, the UIKeyboardWillHideNotification
未发布;至少keyboardWillHide:
方法未被调用。
你有什么建议给我?我真的很想显示一个带有小按钮的键盘,带有向下箭头来隐藏键盘,但这个解决方案也可能是正确的,但我想调整视图大小,为此我需要观察UIKeyboardWillHideNotification
.
非常感谢您的帮助...
(添加:)
In 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() 语句...