【发布时间】:2013-08-11 04:40:39
【问题描述】:
我正在设置 NOTIFICATION 以获取 KEYBOARD 信息来调整视图,以便所选文本字段不被 KEYBOARD 覆盖.
@property CGSize keyboard;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:@"UIKeyboardWillShowNotification"
object:nil];
...
}
- (void) keyboardWillShow:(NSNotification *)note
{
NSDictionary *userInfo = [note userInfo];
self.keyboard = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}
我已经设置了 UITextFieldDelegate,所以我可以在
中使用 KEYBOARD 信息- (void)textFieldDidBeginEditing:(UITextField *)textField
一切都很完美......
第一次除外。
设置 KEYBOARD 属性的 NOTIFICATION 在 textFieldDidBeginEditing 之后被调用,所以第一次调用 KEYBOARD属性未设置,显示不正确。
之后一切正常,因为 KEYBOARD 属性已经设置并且值没有改变。
如何在第一次执行textFieldDidBeginEditing之前获取KEYBOARD信息?
编辑:
确实找到了一些解决方案,而且它似乎确实有效,但对我来说感觉有点骇人听闻,我仍然想知道是否有办法获取键盘信息。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.txtField becomeFirstResponder];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.txtField resignFirstResponder];
}
在屏幕最底部显示和隐藏键盘时会短暂闪烁,我不喜欢,但对于不知道寻找它的人来说,它可能不是很明显或明显。
我必须将 becomeFirstResponder 和 resignFirstResponder 分解为不同的方法,因为如果从同一个方法调用它们,则 keyboardWillShow 不会得到调用。
另外,不能将 becomeFirstResponder 放在 viewDidLoad 中,因为在那种情况下也不会调用 keyboardWillShow。
如果有人有改进或更好的方法,我很乐意听到。
【问题讨论】:
标签: ios objective-c keyboard notifications uitextfielddelegate