在iPhone应用程序上,我有一个自定义键盘,就像标准键盘一样;如果自定义文本字段成为第一响应者,则显示该字段并且如果该字段辞职第一响应者则隐藏。我还发布了通用UIKeyboardWillShowNotification
,UIKeyboardDidShowNotification
及其隐藏对应方,如下所示:
NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithCapacity:5];
[userInfo setObject:[NSValue valueWithCGPoint:self.center]
forKey:UIKeyboardCenterBeginUserInfoKey];
[userInfo setObject:[NSValue valueWithCGPoint:shownCenter]
forKey:UIKeyboardCenterEndUserInfoKey];
[userInfo setObject:[NSValue valueWithCGRect:self.bounds]
forKey:UIKeyboardBoundsUserInfoKey];
[userInfo setObject:[NSNumber numberWithInt:UIViewAnimationCurveEaseOut]
forKey:UIKeyboardAnimationCurveUserInfoKey];
[userInfo setObject:[NSNumber numberWithDouble:thisAnimDuration]
forKey:UIKeyboardAnimationDurationUserInfoKey];
[[NSNotificationCenter defaultCenter] postNotificationName:UIKeyboardWillShowNotification
object:nil
userInfo:userInfo];
此代码正常运行,我在UIViewController
子类中使用它。
现在,由于iPhone OS 3.0 ,UITableViewController
会在系统键盘显示和隐藏时自动调整其tableView的大小。我现在只针对3.0进行编译,我认为如果我的自定义键盘出现,控制器也应调整表的大小,因为我发布了相同的通知。但事实并非如此。表视图控制器被设置为输入字段的委托。
有没有人知道为什么会这样?有没有人成功实现类似的东西?
我在自定义输入字段中有标准输入字段,因此如果用户更改标准键盘隐藏的字段并显示自定义字段。如果tableView没有调整到完整高度并且我不必使用自定义方法重新调整它,那将是有益的。
答案 0 :(得分:0)
我做了类似的事情。如果我记得,我最终只是将TableViewController subecibe发送到您发送或系统发送的通知,然后将更改设置为tableview框架的动画。据推测,内部有类似的东西,但我认为最终结果只是两个动画块相互缠绕,它们都在系统发布通知时运行,但最终结果应该是相同的。
在viewdidLoad中:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardWillShow:)
name: UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardDidShowOrHide:)
name: UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardWillHide:)
name: UIKeyboardWillHidewNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(keyboardDidShowOrHide:)
name: UIKeyboardDidHideNotification object:nil];
并在视图控制器中:
-(void) keyboardWillShow:(id)sender {
[UIView beginAnimations];
[UIView setAnimationDuration:0.3];
self.view.frame = //Your new size
}
-(void) keyboardDidShowOrHide:(id)sender {
[UIView commitAnimations];
}
-(void) keyboardWillHide:(id)sender {
[UIView beginAnimations];
[UIView setAnimationDuration:0.3];
self.view.frame = //Your old size
}
答案 1 :(得分:0)
嗯,你可能会有一些可能性。根据你的描述,似乎UITableView没有使用UIKeyboard通知。
但可能是UINavigationController响应此通知(或UITabBarController)。
您可以在tableview中覆盖setFrame:drawRect:和setNeedsDisplay等方法,以查看调用堆栈中发生的情况。您可以弄清楚究竟是什么导致tableview以正确的大小重绘。
但很有可能,只是自己更改tableView的大小是更容易的解决方案。这些建议只是为了好玩!